传递自建文件时的FileReader FileNotFoundException

时间:2013-11-22 16:22:26

标签: java file filenotfoundexception

这个很有趣。我很感激任何帮助,之前没有任何stackoverflow问题指向我正确的位置。文档对我也没什么帮助。

我被这个代码块抛出了FileNotFoundException:

    public static int wordOccurance(Word t, File D) throws FileNotFoundException
{
    int occurance = 0;

    BufferedReader mainReader = new BufferedReader(new FileReader(D));  
    Scanner kb = new Scanner(mainReader);

我的测试人员文件不会导致这种情况发生:即。 "文件测试器=新文件(" C:\ read.txt");"

但问题仅在我传递由此方法构造的文件时发生:

public static File makeAndCombineFile(String FileOne, String FileTwo) throws IOException
{
    BufferedReader mainReader = null;// null holder value for the later useful bufferedReader
    Scanner kb = null;// null holder for later useful Scanner
    StringBuilder sb = new StringBuilder();

这两个CHUNK之间的其他条件。最可能不是很重要。如果一个输入为空,则返回文件。

else //in case both are good to go and obviously not null
    {
        mainReader = new BufferedReader(new FileReader(FileOne));
        kb = new Scanner(mainReader);
        while(kb.hasNext())
            sb.append(kb.nextLine() + "\n");
        mainReader = new BufferedReader(new FileReader(FileTwo));
        kb = new Scanner(mainReader);
        while(kb.hasNext())
            sb.append(kb.nextLine()+ "\n");

        kb.close();
        return new File(sb.toString());
    }
}

1 个答案:

答案 0 :(得分:0)

我花了一些时间来弄清楚这里发生了什么,但它看起来像你认为这一行:

return new File(sb.toString());

在磁盘上创建一个文件,其中包含从两个扫描仪读取的文本。 它没有。它创建一个java.io.File,它基本上是文件路径的表示;此File表示的路径是从扫描仪读取的数据。换句话说,如果FileOne和FileTwo包含 War and Peace 的文本,那么该文件所代表的路径将是 War and Peace 的文本。该文件不会在磁盘上创建;没有数据写入它。您刚刚创建了一个引用不存在的文件的对象。

使用FileWriter,或许与PrintWriter一起使用,将文本行保存到文件中;然后你可以创建一个包含该文件名称的File对象,并将其传递给你的其他例程:

PrintWriter pw = new PrintWriter(new FileWriter("somename.txt"));
while(kb.hasNext())
    pw.println(kb.nextLine());
pw.close();
return new File("somename.txt");