2015-11-07 67 views
0

在我的函數中我想讀取一個文本文件。如果文件不存在,它將被創建。我想使用相對路徑,所以如果我有.jar文件將被創建在完全相同的目錄。我試過this。這是我的函數和變量fNamef.createNewFile();設置爲test.txtJava創建文件如果不存在

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(); 
} 

我得到一個錯誤,它說

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) 
+0

添加println或其他東西,並調試路徑的樣子。你也可以說功能的哪一行是拋出異常。 – Reinard

+0

如果你使用Java 7+,你應該考慮使用java.nio.file而不是 – fge

+0

爲什麼?對你來說空檔有什麼好處?和一個空字符串?只要趕上'FileNotFoundException,'或者更好的是讓它被拋出。 – EJP

回答

3

的問題是,

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

不設置文件編碼爲UTF8。相反,第二個參數是子路徑,與編碼無關;第一個是父路徑。

所以你想要的其實是:

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

或者只是:

File f = new File(fullFilePathName); 

沒有第二個參數

0

使用mkdirs()--plural--創建所有缺少的部分的路徑。

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

注意 '的mkdir()' --singular--只創建路徑列表中的一部分,如果可能的話。

相關問題