如果文件不存在,Java 如何创建文件

4

在我的函数中,我想要读取一个文本文件。如果文件不存在,则将创建该文件。我想使用相对路径,这样如果我有 .jar,则文件将在完全相同的目录中创建。我已经尝试了这个方法。这是我的函数和变量fName设置为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();
}

我在f.createNewFile();处遇到错误,错误信息如下:
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)

添加一个println或其他内容,调试一下路径的样子。你能说一下哪一行函数抛出了异常吗? - Reinard
如果您使用Java 7+,应该考虑使用java.nio.file。 - fge
为什么?一个空文件对你有什么好处?还有一个空字符串?只需捕获FileNotFoundException,或者更好的方法是让它被抛出。 - user207421
2个回答

7
问题在于:
File f = new File(fName, "UTF8");

没有将文件编码设置为UTF8。相反,第二个参数是子路径,与编码无关;第一个参数是父路径。

所以你实际想要的是:

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

或者只需要:
File f = new File(fullFilePathName);

没有第二个参数


1
使用mkdirs()函数(复数形式)来创建路径中所有缺失的部分。
File f = new File("/many/parts/path");
f.mkdirs();

请注意,'mkdir()' --单数-- 只会在可能的情况下创建路径的列表部分。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接