如何使用classpath指定文件位置?

时间:2014-02-02 02:42:47

标签: java csv supercsv

以下是我的maven项目的结构:

main和test文件夹在src文件夹下,java和resources文件夹在main文件夹下, 在资源文件夹中,有一个csv文件可供阅读。

src  
  --main  
    |-- java  
    |-- resources  
           |-- test.csv
test  

据我所知,
InputStream file = ClassLoader.getSystemResourceAsStream("test.csv");
可以获取资源文件中的文件内容。

但是,为了基于supercsv库读取和解析csv文件,我必须使用以下代码,但CsvBeanReader方法不接受InputStream。

beanReader = new CsvBeanReader(new FileReader(CSV_FILENAME), CsvPreference.STANDARD_PREFERENCE);   

那么我怎样才能不仅根据maven结构从资源文件夹中获取文件,而且CsvBeanReader也可以接受传入的参数。

2 个答案:

答案 0 :(得分:2)

尝试使用InputStreamReader代替FileReader

这是可能的,因为CsvBeanReader的构造函数接受抽象类Reader

CsvBeanReader(Reader reader, CsvPreference preferences)
//Constructs a new CsvBeanReader with the supplied Reader and CSV preferences.

您可以使用已获得的InputStreamReader构建InputStream

InputStreamReader(InputStream in)
InputStreamReader(InputStream in, Charset cs)
InputStreamReader(InputStream in, CharsetDecoder dec)
InputStreamReader(InputStream in, String charsetName)

答案 1 :(得分:1)

您可以使用java.io.InputStream(扩展java.io.InputStreamReader)包裹java.io.Reader并将其传递给CsvBeanReader类。