如何获取项目中的文件路径以使用OpenCSV读取它

时间:2017-07-16 21:10:55

标签: java opencsv

我在源文件夹中的文件夹中有一个CSV文件,但我无法访问它。

我让它与我在互联网上找到的东西一起工作:

URL url = getClass().getResource("/csv/recetas.csv");
File file = new File(url.getPath());
FileReader fileReader = new FileReader(file);
CSVReader csvReader = new CSVReader(fileReader, ',', '"', 1);

但它只在我在IDE中运行时才有效。当我构建jar并尝试运行它时,FileReader无法找到该文件,它不会为URL或File抛出错误。

这是我的project folder所以你可以理解我。感谢。

2 个答案:

答案 0 :(得分:0)

InputStream in = getClass().getResourceAsStream("/csv/recetas.csv");
InputStreamReader reader = new InputStreamReader(in, StandardCharsets.UTF_8);
CSVReader(reader, ',', '"', 1);

资源是可能打包在jar中的类路径“文件”。它们 File,并且是只读的。

同样为了兼容性,请明确提供字符集。

答案 1 :(得分:0)

getClass().getResource()使用类加载器加载资源。这意味着您的csv文件将不可见,除非它位于classpath

再次查看您的代码和问题,getClass().getResource()对我来说似乎是多余的,因为File(...)的构造函数接受描述为String的文件路径。

请参阅: {{3}}

引用:

  

File(String pathname)通过转换创建一个新的File实例   将pathname字符串赋予抽象路径名。

为了使您的程序更通用,我建议您避免硬编码文件路径,因为csv文件可以位于文件系统中的任何位置,并且可能并不总是称为recetas.csv

人们通常会做的是让java程序接受--csv之类的选项。然后让用户指定文件路径,您的代码将只是new File(theSpecifiedPath)