Yritän luoda uutta kansiota:
new File("C:\\Users\\Varpu\\AppData\\Roaming\\.minecraft\\UUSI\\").mkdirs();
Ongelma: Tuo palautta falsen eikä kasiota näy missään?
Koodi kokonaisuudessaan:
package minecraftmodinstaller; import java.io.*; import java.util.Scanner; import java.util.logging.Level; import java.util.logging.Logger; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; public class MinecraftModInstaller { static double version = 0.1; static Scanner scanner = new Scanner(System.in); static ZipInputStream zin = null; static FileInputStream in = null; static ZipEntry[] ZipEntrys = null; public static void main(String[] args) throws FileNotFoundException { try { System.out.println("\n\t\tAutomaattinen Modin asentajaa Minecrafttiin\n\t\t\t\t\t\t v"+version+"\n\n\n<------------------------------------------------------------------------------>\n"); System.out.print("\t\tAnna modin polku: "); String modpath = scanner.nextLine(); System.out.println(); try { in = new FileInputStream(modpath); zin = new ZipInputStream(in); } catch(FileNotFoundException e){ System.out.println("\t\tTiedostoa ei löydy!"); System.exit(0); } System.out.println("\n<------------------------------------------------------------------------------>\n"); ZipEntry ze; System.out.println("\t\tModi sisältää seuraavat tiedostot:"); //try { while((ze = zin.getNextEntry()) != null){ System.out.println("\t\t\t["+ze.getName()+"]"); } System.out.println("\n\t\tPuretaan tiedostoja kansioon %APPDATA%\\.minecraft\\"); String appdatad = ""; String osname = System.getProperty("os.name"); String userd = System.getProperty("user.home"); switch(osname){ case "Windows 7": case "Windows Vista": appdatad = userd+"\\AppData\\Roaming"; break; case "Windows XP": case "Windows 2000": appdatad = userd+"\\Application Data"; } System.out.println("-----"); zin.close(); in.close(); in = new FileInputStream(modpath); zin = new ZipInputStream(in); while((ze = zin.getNextEntry()) != null){ String name = appdatad+"\\.minecraft\\"+ze.getName().replace('/', '\\'); System.out.println(name); System.out.println(!name.endsWith("\\")); if(!name.endsWith("\\")){ try (FileWriter fw = new FileWriter(new File(name))) { fw.write(""); fw.flush(); } FileOutputStream outf = new FileOutputStream(name); byte[] buff = new byte[4096]; int len; while ((len = zin.read(buff)) > 0) { outf.write(buff, 0, len); } System.out.println(name); outf.close(); } else{ System.out.println(new File(name).mkdirs(); System.out.println("Luodaan kansiota!"); } } //} catch (IOException ex) { // System.out.println("!!! VIRHEELLINEN ZIP-TIEDOSTO !!!"); //} } catch (IOException ex) { Logger.getLogger(MinecraftModInstaller.class.getName()).log(Level.SEVERE, null, ex); } } }
Tuon olisi siis tarkoitus asentaa minecraft-peliin moodi zip-tiedostosta.
Auttaisiko jos poistaisi viimeisen \\ ?
Ei nyt oo windowskoneella javac että pääsis testaamaan.
Kansio on vain osa tiedostonimeä. Eikai niitä pitäisikään pystyä Javalla luomaan?
E: .mkdirs() vissiinkin luo vain yläkansiot tarvittaessa.
Lisäys: Tuosta linkistä avautuvalla sivullahan on ensin luotu File-ilmentymä ja annettu polku, sitten vasta kutsuttu metodia mkdirs(). Liekö tuolla sitten merkitystä..? Luulisi, että ennen kun voi kutsua metodeita, on ensin luotava itse olio.
Lisäys:
Grez kirjoitti:
Auttaisiko jos poistaisi viimeisen \\ ?
Luultavasti
Onko kyseiseen kansioon/kansioihin varmasti kirjoitusoikeus?
Tai onko kansio .minecraft piilotettu kansio? (Jolloin kyseinen kansio voi olla jo olemassa, vaikket oletusasetuksilla näekään sitä)
Entä onko File.separatorChar == '\\'? (Windowseilla näin pitäisi olla)
Ja jos edelliset ovat kunnossa, niin mitä
System.out.println(new File(name).getAbsolutePath());
sanoo?
Lopussa oleva '\\' ei tietääkseni vaikuta siihen onnistuuko kansioiden luonti vai ei.
System.out.println(new File(name).mkdirs();
Tuosta ainakin näyttäisi puuttuvan sulku lopusta. Jos ei auta niin typistä esimerkkiä rivi kerrallaan yksinkeraisimpaan mahdolliseen muotoon, jolla virhe edelleen toistuu. Todennäköisesti löydät siten jo itse ongelmakohdan, mutta jos et niin laita lyhennetty versio tänne muiden katseltavaksi.
Aihe on jo aika vanha, joten et voi enää vastata siihen.