【发布时间】:2018-03-05 18:18:45
【问题描述】:
我正在尝试在我的 .jar 中以 File 的形式获取类包的目录(层次结构为 /controller/core):
File directory_file_of_package = new File(getClass().getResource("/controller/core").toURI());
当我在 IDE 中运行程序时,它可以工作,但是当我将它作为独立的 .jar 运行时,它给了我这个错误:
java.lang.IllegalArgumentException: URI is not hierarchical
查看这些问题(why my URI is not hierarchical? 和 Java Jar file: use resource errors: URI is not hierarchical)对我没有帮助,因为这些问题涉及在 .jar 中获取 File 作为资源(getResourceAsStream()),但我想要获取的是一个目录。
此外,接受的答案是这样的:
通常,IDE 将文件系统类和资源分开。但是当罐子被创建时,它们被放在一起。
那么,有没有办法抓取/controller/core的目录呢?
我的 XY 问题:
我正在尝试使用 CSVJDBC (http://csvjdbc.sourceforge.net/) 读取 .CSV 文件,DriverManager 引用 CSV 文件的方式就像 包含文件夹 是 数据库,CSV 文件 是 表格。
public class SearchData {
void SearchData() {
try {
Class.forName("org.relique.jdbc.csv.CsvDriver");
File directory_file_of_package_containing_csv = new File(getClass().getResource("/controller/core").toURI());
// Driver points to directory which contains the CSV file as if it is the database
Connection conn = DriverManager.getConnection("jdbc:relique:csv:" + directory_file_of_package_containing_csv.toString());
System.out.println("Connection established.");
Statement stmt = conn.createStatement();
System.out.println("Statement created.");
// CSV is named "data.csv" so the CsvDriver sees "data" as the table name
String sql = "SELECT id,name FROM data";
ResultSet results = stmt.executeQuery(sql);
...
} catch (ClassNotFoundException | SQLException | URISyntaxException e) {
e.printStackTrace();
}
}
}
如何将 CsvJdbc 指向 .jar 中包含的 csv 文件?
【问题讨论】:
标签: java jar uri java-io csvjdbc