Witam!
Od używania Windows dostaję wysypki, parchów i niestrawności. Jedynym sposobem na mój problem było zainstalować na PC-ie Linuksa, kupić MacBooka oraz telefon G1. Jak się jednak okazuje spora część społeczności Android nadal używa Windy, więc mam z tego powodu (oprócz zgryzot) pewne kłopoty. Pierwszy z nich ujawnił się, gdy do andnav2 chciałem wgrać gotową paczkę z planem Londynu. Okazało się, po rozpakowaniu, że zawiera ona ponad 7 tyś plików, których nazwy wyglądaly tak: mapnik\0\0\0.png.andnav. Problem polega oczywiście na nieprawidłowym separatorze "\" z Win zamiast "/" w *niksach (Uniksach, np. mój MacOS X lub Linux). Aby rozwiązać ten problem, trzeba odtworzyć strukturę plików pakietu mapnik i zmienić nazwy plików. W przypadku ponad 7000 plików jest to kłopotliwe, więc napisałem prosty program w Java, który zrobi to za mnie. Zajęło mi to pół drogi samolotem między Warszawą, a Londynem. Poniżej przedstawiam kod programu. Proszę spobodnie go modyfikować.
Miłego użytkowania!
Plik binarny class: http://www.mediafire.com/?mydwzowwbyk
Plik ze źródłem: http://www.mediafire.com/?i2medgwd2gr
import java.io.File;
public class Mapnik {
public Mapnik(String main_path) {
try {
File main_dir = new File(main_path);
File[] files = main_dir.listFiles();
System.out.println("Folder zawiera ".concat(Integer.toString(files.length)).concat(" plikow do przeksztalcenia"));
//usuwa "Mapnik z nazwy"
for(File file : files){
String fileName = file.getName();
if(fileName.length() >7) {
String new_name = fileName.substring(7);
file.renameTo(new File(main_path.concat("//").concat(new_name)));
}
}
files = main_dir.listFiles();
//Tworzy foldery pierwszego rzędu
makeDirs(files, main_path);
//TWorzy kolejne potomne foldery
File[] dirs = main_dir.listFiles();
for(File dir : dirs) {
files = dir.listFiles();
makeDirs(files, dir.getPath());
}
}
catch(java.lang.NullPointerException exc) {}
}
public static void main(String[] args) {
Mapnik mapnik = new Mapnik(args[0]);
}
public void makeDirs(File[] files, String path) {
for(File file : files){
String fileName = file.getName();
int sep_idx = fileName.indexOf("\\");
if(sep_idx != -1) {
String dir_name = fileName.substring(0,sep_idx);
File dir = new File(path.concat("//").concat(dir_name));
if(!dir.exists()) {
dir.mkdir();
}
String new_name = fileName.substring(sep_idx+1);
file.renameTo(new File(path.concat("//").concat(dir_name).concat("//").concat(new_name)));
}
}
}
}