我有一个java应用程序,其中我使用了两个excel文件(.csv文件)作为输入。我想制作该java应用程序的runnable jar。但是当我运行那个java项目作为runnable jar导出之后jar它不包含两个输入csv文件。
任何人都可以帮助我如何使用csv文件导出java应用程序。
以下是我用来访问csv文件的代码行
String csvFile = "./input/silkair.Schedule1 (1).csv";
//InputStream inputStream = getClass().getResourceAsStream(csvFile);
BufferedReader br = null;
// br = new BufferedReader(new InputStreamReader(inputStream));
br = new BufferedReader(new FileReader(csvFile));
答案 0 :(得分:0)
如果你想从jar中读取CSV文件,那么它们必须包含在jar中。使用jar tvf your.jar
或zip实用程序进行检查。如果从jar中读取文件,请将InputStreamReader
与getResourceAsStream
一起使用。
如果你想从文件系统中读取CSV文件,那么你需要将它们放在文件系统上,而不是放在jar中(或者在运行之前从jar中提取它们)。如果从文件系统读取文件,请使用FileReader
和文件系统文件名。
这是一个示范......
两个源文件 - 一个从jar读取,一个从文件系统读取:
$ cat ReadFile.java
import java.io.*;
public class ReadFile {
public static void main(String[] args) throws IOException {
String csvFile = args[0];
BufferedReader reader = new BufferedReader(new FileReader(csvFile));
String line;
while((line = reader.readLine()) != null) {
System.out.println(line);
}
}
}
$ cat ReadResource.java
import java.io.*;
public class ReadResource {
public static void main(String[] args) throws IOException {
String csvFile = args[0];
BufferedReader reader = new BufferedReader(new InputStreamReader(ReadResource.class.getResourceAsStream(csvFile)));
String line;
while((line = reader.readLine()) != null) {
System.out.println(line);
}
}
}
jar的内容 - _input_/my.csv
处的CSV文件:
$ jar tvf readtest.jar
0 Mon Nov 17 12:58:04 GMT 2014 META-INF/
71 Mon Nov 17 12:58:04 GMT 2014 META-INF/MANIFEST.MF
697 Mon Nov 17 12:52:30 GMT 2014 ReadFile.class
842 Mon Nov 17 12:52:30 GMT 2014 ReadResource.class
0 Mon Nov 17 12:47:38 GMT 2014 _input_/
16 Mon Nov 17 12:47:20 GMT 2014 _input_/my.csv
文件系统的内容 - input/my.csv
处的CSV文件:
$ mv _input_/ input
$ find .
.
./input
./input/my.csv
./ReadFile.class
./ReadFile.java
./ReadResource.class
./ReadResource.java
./readtest.jar
使用ReadFile,您可以从文件系统中读取,但不能从jar:
读取$ java -cp readtest.jar ReadFile input/my.csv
foo,bar
bar,foo
$ java -cp readtest.jar ReadFile _input_/my.csv
Exception in thread "main" java.io.FileNotFoundException: _input_\my.csv (The system cannot find the path specified)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:106)
at java.io.FileInputStream.<init>(FileInputStream.java:66)
at java.io.FileReader.<init>(FileReader.java:41)
at ReadFile.main(ReadFile.java:5)
使用ReadResource,您可以从jar中读取,但不能从文件系统中读取:
$ java -cp readtest.jar ReadResource input/my.csv
Exception in thread "main" java.lang.NullPointerException
at java.io.Reader.<init>(Reader.java:61)
at java.io.InputStreamReader.<init>(InputStreamReader.java:55)
at ReadResource.main(ReadResource.java:5)
$ java -cp readtest.jar ReadResource _input_/my.csv
foo,bar
bar,foo