Î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)
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
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.
FileNotFoundException,
sau, mai bine, lasă-l să fie aruncat. – > Por user207421.