Parsing Univocity解析器-代码不';t运行:线程中的异常";“主要”;java.lang.NullPointerException

Parsing Univocity解析器-代码不';t运行:线程中的异常";“主要”;java.lang.NullPointerException,parsing,csv,Parsing,Csv,我想解析.csv文件,我正在学习Univocity解析器教程,并将它们的jar文件添加到依赖项中 出现空指针异常 我想让Univocity解析器工作,这样我就可以看到它有多好,这是我在IntelliJ中运行的代码,任何帮助都将不胜感激,谢谢 import com.univocity.parsers.csv.CsvParser; import com.univocity.parsers.csv.CsvParserSettings; import java.io.InputStreamReader;

我想解析.csv文件,我正在学习Univocity解析器教程,并将它们的jar文件添加到依赖项中

出现空指针异常

我想让Univocity解析器工作,这样我就可以看到它有多好,这是我在IntelliJ中运行的代码,任何帮助都将不胜感激,谢谢

import com.univocity.parsers.csv.CsvParser;
import com.univocity.parsers.csv.CsvParserSettings;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.UnsupportedEncodingException;
import java.lang.IllegalStateException;
import java.lang.String;
import java.util.List;


public class UnivocityParsers {

public Reader getReader(String relativePath) {
    try {
        return new InputStreamReader(this.getClass().getResourceAsStream(relativePath), "Windows-1252");
    } catch (UnsupportedEncodingException e) {
        throw new IllegalStateException("Unable to read input", e);
    }
}

public void parseCSV(){

    CsvParserSettings settings = new CsvParserSettings();
    //the file used in the example uses '\n' as the line separator sequence.
    //the line separator sequence is defined here to ensure systems such as MacOS and Windows
    //are able to process this file correctly (MacOS uses '\r'; and Windows uses '\r\n').
    settings.getFormat().setLineSeparator("\r");

    // creates a CSV parser
    CsvParser parser = new CsvParser(settings);

    // parses all rows in one go.
    List<String[]> allRows = parser.parseAll(getReader("prodlist.csv"));

}

public static void main(String arg[]) {

    UnivocityParsers univocityParsers = new UnivocityParsers();

    univocityParsers.parseCSV();


}


}
import com.univocity.parsers.csv.CsvParser;
导入com.univocity.parsers.csv.CsvParserSettings;
导入java.io.InputStreamReader;
导入java.io.Reader;
导入java.io.UnsupportedEncodingException;
导入java.lang.IllegalStateException;
导入java.lang.String;
导入java.util.List;
公共类UnivocityParser{
公共读取器getReader(字符串相对路径){
试一试{
返回新的InputStreamReader(this.getClass().getResourceAsStream(relativePath),“Windows-1252”);
}捕获(不支持的编码异常e){
抛出新的IllegalStateException(“无法读取输入”,e);
}
}
public void parseCSV(){
CsvParserSettings=新CsvParserSettings();
//示例中使用的文件使用“\n”作为行分隔符序列。
//此处定义了行分隔符序列,以确保MacOS和Windows等系统
//能够正确处理此文件(MacOS使用“\r”;Windows使用“\r\n”)。
settings.getFormat().setLineSeparator(“\r”);
//创建CSV解析器
CsvParser parser=新的CsvParser(设置);
//一次性解析所有行。
List allRows=parser.parseAll(getReader(“prodlist.csv”);
}
公共静态void main(字符串arg[]){
UnivocityParsers UnivocityParsers=新的UnivocityParsers();
univocityParsers.parseCSV();
}
}
堆栈跟踪:

 Exception in thread "main" java.lang.NullPointerException   
 at java.io.Reader.<init>(Reader.java:78)
 at java.io.InputStreamReader.<init>(InputStreamReader.java:97)
 at UnivocityParsers.getReader(UnivocityParsers.java:15)
 at UnivocityParsers.parseCSV(UnivocityParsers.java:33)
 at UnivocityParsers.main(UnivocityParsers.java:41)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at        sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 at java.lang.reflect.Method.invoke(Method.java:497)
 at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)

 Process finished with exit code 1
线程“main”java.lang.NullPointerException中的异常 在java.io.Reader上。(Reader.java:78) 位于java.io.InputStreamReader。(InputStreamReader.java:97) 位于UnivocityParsers.getReader(UnivocityParsers.java:15) 在UnivocityParsers.parseCSV(UnivocityParsers.java:33) 位于UnivocityParsers.main(UnivocityParsers.java:41) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处 位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中 位于java.lang.reflect.Method.invoke(Method.java:497) 位于com.intellij.rt.execution.application.AppMain.main(AppMain.java:140) 进程已完成,退出代码为1
InputStreamReader找不到您的“prodlist.csv”文件。我怀疑它应该是“/prodlist.csv”,因为您似乎是从
resources
文件夹中获取此文件的

在任何情况下,您都可以使用文件的完整路径来确保。添加此方法:

public Reader getFileReader(String absolutePath) {
    return new InputStreamReader(new FileInputStream(new File(absolutePath)), "UTF-8");
}
然后使用以下命令调用
parser.parseAll

 List<String[]> allRows = parser.parseAll(getFileReader("c:/path/to/prodlist.csv"));
List allRows=parser.parseAll(getFileReader(“c:/path/to/prodlist.csv”);

欢迎来到StackOverflow。请遵循帮助文档中的发布指南。适用于这种情况。另外,请修复您发布的代码的格式。包括stacktraceOk,包括在内,谢谢。您好,我现在只收到一个错误,那就是:
无法解析符号“absolutePath”
。另外,getFileReader是否应该改为getReader,似乎我必须将其更改为getReader?此外,我还有prodlist,它位于这个项目的Intellij文件夹的第一级目录中。此外,我的项目库中也有univocity-parsers-1.5.6.jar。您遇到的错误是由于您不熟悉Java语言,而不是库。我建议你花一点时间在谷歌上,追踪你所遇到的错误,并试图理解你的代码中到底出了什么问题。祝你一切顺利。嗨,非常感谢你的回复。我让它工作了。我不得不将.csv文件放入IntelliJ项目的src目录中。如果.csv是从.jar运行的,Univocity解析器会找到它吗?当从.jar中读取文件时,它会工作。在这种情况下,您需要像在原始问题中那样使用类似于
this.getClass().getResourceAsStream
的东西。您好,那么解析器肯定能够从jar内运行并解析该jar外的.csv文件?谢谢