2015-11-07 69 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--只创建路径列表中的一部分,如果可能的话。

相关问题