Java creează fișierul dacă nu există (Programare, Java, Fișier, Ioexception)

tprieboj a intrebat.

În funcția mea vreau să citesc un fișier text. Dacă fișierul nu există, acesta va fi creat. Vreau să folosesc calea relativă, astfel încât dacă am .jar, fișierul va fi creat în exact același dir. Am încercat acest lucru. Aceasta este funcția și variabila mea fName este setată la test.txt

    private static String readFile(String fName) {
    String noDiacText;
    StringBuilder sb = new StringBuilder();
    try {
        File f = new File(fName, "UTF8");
        if(!f.exists()){
            f.getParentFile().mkdirs();
            f.createNewFile();
        }

        FileReader reader = new FileReader(fName);
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(fName), "UTF8"));

        String line;

        while ((line = bufferedReader.readLine()) != null) {
            sb.append(line);

        }
        reader.close();

    } catch (IOException e) {
        e.printStackTrace();
    }


    return sb.toString();
}

Primesc o eroare la f.createNewFile(); se spune

java.io.IOException:  System cannot find the path specified
at java.io.WinNTFileSystem.createFileExclusively(Native Method)
at java.io.File.createNewFile(File.java:1012)
at main.zadanie3.readFile(zadanie3.java:92)

Comentarii

  • Adăugați un println sau ceva de genul și depanați cum arată calea. Ați putea spune, de asemenea, ce linie a funcției aruncă excepția. –  > Por Reinard.
  • Dacă folosiți Java 7+, ar trebui să luați în considerare utilizarea java.nio.file în loc –  > Por fge.
  • De ce? La ce vă folosește un fișier gol? Și un String gol? Doar prindeți FileNotFoundException, sau, mai bine, lasă-l să fie aruncat. –  > Por user207421.
2 răspunsuri
Bon

Problema este că

File f = new File(fName, "UTF8");

Nu setează codificarea fișierului la UTF8. În schimb, al doilea argument este calea copilului, care nu are nimic de-a face cu codificarea; primul este calea părintelui.

Deci ceea ce voiai este de fapt:

File f = new File("C:\Parent", "testfile.txt");

sau doar:

File f = new File(fullFilePathName);

Fără al doilea argument

Shoham

Folosiți mkdirs() –plural– pentru a crea toate părțile lipsă din calea de acces.

File f = new File("/many/parts/path");
f.mkdirs();

Rețineți că ‘mkdir()’ –singular– creează doar partea de listă a căii, dacă este posibil.