【问题标题】:File Not Found Exception - Can't see the issue找不到文件异常 - 看不到问题
【发布时间】:2013-09-18 20:56:54
【问题描述】:

我尝试使用整个路径直接链接,但这也没有解决。

package eliza;

import java.io.*;

public class Eliza {

public static void main(String[] args) throws IOException {
    String inputDatabase = "src/eliza/inputDataBase.txt";
    String outputDatabase = "src/eliza/outputDataBase.txt";
    Reader database = new Reader();

    String[][] inputDB = database.Reader(inputDatabase);
    String[][] outputDB = database.Reader(outputDatabase);

}
}

这是阅读器类:

package eliza;

import java.io.FileReader;
import java.io.BufferedReader;
import java.io.IOException;

public class Reader {

public String[][] Reader(String name) throws IOException {
    int length = 0;
    String sizeLine;

    FileReader sizeReader = new FileReader(name);
    BufferedReader sizeBuffer = new BufferedReader(sizeReader);

    while((sizeLine = sizeBuffer.readLine()) != null) {
        length++;
    }

    String[][] database = new String[length][1];

    return (database);
}
}

这是我的目录的照片。我什至将这些文本文件放在“eliza”根文件夹中:here

有什么想法吗?

【问题讨论】:

  • 文件引用将与程序的执行上下文相关。将文件放在 src 文件夹中会生成嵌入式资源,这是一个不同的问题。添加 System.out.println(new File(".").getCanonicalPath());到程序的开头,这将告诉程序从“哪里”运行...
  • C:\Users\Tommy\Desktop\Eliza\src 这就是结果。所以我应该可以只使用 inputDataBase.txt ,不是吗?
  • 我发现了这个问题。我在源目录的 eliza 包文件夹中有文件。我将它们移至 src 并解决了问题。有没有办法引用打包目录中的文件?
  • 我担心它在 src 目录中运行,但是是的,你“可以”将它放在这里。我假设你在 eclipse 中运行 ...
  • 应用程序类路径上下文中的文件通常称为嵌入式资源。这些可以通过使用 getClass().getResource("...") 之类的方法来访问。这将返回资源的 URL,您可以访问其 InputStream 以读取其内容...

标签: java java-io filenotfoundexception


【解决方案1】:

源目录树在执行期间通常不存在,因此不应将运行时需要的文件放在那里......除非您将它们用作资源,在这种情况下它们的路径名是相对于包根目录,不以 'src' 开头,通过 getResourceXXX() 方法访问数据,而不是通过 FileInputStream。

【讨论】:

    【解决方案2】:

    由于您使用的是 IDE,因此您需要提供完整的规范路径。应该是

    String inputDatabase = "C:\\Users\\Tommy\\Desktop\\Eliza\\src\\eliza\\inputDataBase.txt";
    String outputDatabase = "C:\\Users\\Tommy\\Desktop\\Eliza\\src\\eliza\\outputDataBase.txt";
    

    IDE 可能正在执行其bin 文件夹中的字节码,并且找不到相对引用。

    【讨论】:

    • 更好的(和可移植的)解决方案是解析工作目录;)
    • 你这么说很有趣,因为我在 Eliza 根目录中也有这些文件。我什至将它们复制到 IDE 生成的每个文件夹中:build、dist、nbproject、src。什么是使这个可移植的方法,所以我不必指定完整的规范路径?编辑:没有注意到您对可移植性的评论。谢谢。
    • @user2318481 编写一个包含所有 jar 和 java 文件的小脚本,然后从命令行编译它。然后从根目录运行主文件。所有相对引用都将从该目录解析。
    【解决方案3】:

    你没有给出正确的路径,请重新检查

    试试

    {BASE_PATH}+ "Eliza/src/inputDataBase.txt"
    

    【讨论】:

      【解决方案4】:

      给出确切的路径,如

      String inputDatabase = "c:/java/src/eliza/inputDataBase.txt";
      

      【讨论】:

      • "C://Users//Tommy//D​​esktop//Eliza//src//eliza//outputDataBase.txt" "C://Users//Tommy//D​​esktop//Eliza //src//eliza//inputDataBase.txt" 我用了它,它解决了这个问题。我需要使这个便携。有什么建议吗?
      • @user2318481 便携是什么意思?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      相关资源
      最近更新 更多