Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-正在读取的文件返回null_Java_Arrays_Bufferedreader - Fatal编程技术网

Java-正在读取的文件返回null

Java-正在读取的文件返回null,java,arrays,bufferedreader,Java,Arrays,Bufferedreader,您好,我正在将一个文件加载到我的程序中并分配每个值(存储在一个数组的新行上),我似乎无法发现为什么每个索引中包含文件内容的数组都为空 private void readAndProcessWords() { try { FileReader _fr = new FileReader(FILEPATH); BufferedReader textReader = new BufferedReader(_fr); int numLine

您好,我正在将一个文件加载到我的程序中并分配每个值(存储在一个数组的新行上),我似乎无法发现为什么每个索引中包含文件内容的数组都为空

    private void readAndProcessWords() {
    try {
        FileReader _fr = new FileReader(FILEPATH);
        BufferedReader textReader = new BufferedReader(_fr);

        int numLines = getNumLines(textReader);
        String[] words = new String[numLines];

        for(int i=0;i<numLines;i++){
            words[i] = textReader.readLine();
            System.out.println(words[i]);
        }
        //clears memory reserved for this buffered reader
        textReader.close();

    } catch(IOException e) {
        System.out.println(e);
    }
}

private int getNumLines(BufferedReader textReader) throws IOException{
    String line;
    int numLines =0;

    while((line = textReader.readLine()) != null){
        numLines++;
    }
    return numLines;    
}
}

最简单的解决方案是重新创建
读取器
,问题是调用
getNumLines()
会将BufferedReader中的位置移动到文件末尾

BufferedReader textReader = new BufferedReader(_fr);
int numLines = getNumLines(textReader); // <-- textReader is at EOF after this.
textReader.close();
textReader = new BufferedReader(_fr);
BufferedReader textReader=新的BufferedReader(_-fr);

int numLines=getNumLines(文本阅读器);// 最简单的解决方案是重新创建
读取器
,问题是调用
getNumLines()
会将BufferedReader中的位置移动到文件末尾

BufferedReader textReader = new BufferedReader(_fr);
int numLines = getNumLines(textReader); // <-- textReader is at EOF after this.
textReader.close();
textReader = new BufferedReader(_fr);
BufferedReader textReader=新的BufferedReader(_-fr);

int numLines=getNumLines(文本阅读器);// 不要通过两次读取文件来获取行数(这很慢,很烦人,如果文件在两次调用之间更改,则无法工作),而是将行读取到一个大小可变的列表中:

private void readAndProcessWords() {
    try {
        FileReader _fr = new FileReader(FILEPATH);
        BufferedReader textReader = new BufferedReader(_fr);

        List<String> words = new ArrayList<>();
        String line;
        while ((line = textReader.readLine()) != null) {
            words.add(line);
        }
        textReader.close();

        for (String word : words) {
            System.out.println(word);
        }
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}
private void readAndProcessWords(){
试一试{
FileReader _fr=新的FileReader(FILEPATH);
BufferedReader textReader=新的BufferedReader(_fr);
List words=new ArrayList();
弦线;
而((line=textReader.readLine())!=null){
添加(行);
}
textReader.close();
for(字符串字:字){
System.out.println(word);
}
}捕获(IOE异常){
抛出新的运行时异常(e);
}
}
好消息:这个功能,所以你不需要重写它

private void readAndProcessWords() {
    try {
        List<String> words = Files.readAllLines(Paths.get(FILEPATH));

        for (String word : words) {
            System.out.println(word);
        }
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}
private void readAndProcessWords(){
试一试{
List words=Files.readAllLines(path.get(FILEPATH));
for(字符串字:字){
System.out.println(word);
}
}捕获(IOE异常){
抛出新的运行时异常(e);
}
}

不要通过两次读取文件来获取行数(这很慢,很烦人,如果文件在两次调用之间发生更改,则无法工作),而是将行读取到一个可变大小的列表中:

private void readAndProcessWords() {
    try {
        FileReader _fr = new FileReader(FILEPATH);
        BufferedReader textReader = new BufferedReader(_fr);

        List<String> words = new ArrayList<>();
        String line;
        while ((line = textReader.readLine()) != null) {
            words.add(line);
        }
        textReader.close();

        for (String word : words) {
            System.out.println(word);
        }
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}
private void readAndProcessWords(){
试一试{
FileReader _fr=新的FileReader(FILEPATH);
BufferedReader textReader=新的BufferedReader(_fr);
List words=new ArrayList();
弦线;
而((line=textReader.readLine())!=null){
添加(行);
}
textReader.close();
for(字符串字:字){
System.out.println(word);
}
}捕获(IOE异常){
抛出新的运行时异常(e);
}
}
好消息:这个功能,所以你不需要重写它

private void readAndProcessWords() {
    try {
        List<String> words = Files.readAllLines(Paths.get(FILEPATH));

        for (String word : words) {
            System.out.println(word);
        }
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}
private void readAndProcessWords(){
试一试{
List words=Files.readAllLines(path.get(FILEPATH));
for(字符串字:字){
System.out.println(word);
}
}捕获(IOE异常){
抛出新的运行时异常(e);
}
}

由于缓冲读取器是一个对象,您将其作为对
getNumLines()
的引用传递,而不是作为副本传递,因此当您在发送给
getNumLines()
的同一缓冲读取器上运行
readLine()
时,最终会得到一个空值,因为您已经运行了
.readLine()

运行
getNumLines()
后,使用新的缓冲读取器关闭并重新打开文档

我还记得java中有一个用于缓冲读取器的
Mark()
Recall()
方法,也可以作为一种解决方法

我想是的

        FileReader _fr = new FileReader(FILEPATH);
        BufferedReader textReader = new BufferedReader(_fr);


        textReader.Mark();


        int numLines = getNumLines(textReader);


        textReader.Recall();


        String[] words = new String[numLines];

        for(int i=0;i<numLines;i++)
        {
            words[i] = textReader.readLine();
            System.out.println(words[i]);
        }
        //clears memory reserved for this buffered reader
        textReader.close();
FileReader\u fr=新的FileReader(FILEPATH);
BufferedReader textReader=新的BufferedReader(_fr);
text reader.Mark();
int numLines=getNumLines(文本阅读器);
textReader.Recall();
String[]words=新字符串[numLines];

对于(int i=0;i由于缓冲读取器是一个对象,您将其作为对
getNumLines()
的引用传递,而不是作为副本传递,因此当您在发送给
getNumLines()
的同一缓冲读取器上
.readLine()
时,您将得到一个空值,因为您已经运行了
.readLine()

运行
getNumLines()
后,使用新的缓冲读取器关闭并重新打开文档

我还记得java中有一个用于缓冲读取器的
Mark()
Recall()
方法,也可以作为一种解决方法

我想是的

        FileReader _fr = new FileReader(FILEPATH);
        BufferedReader textReader = new BufferedReader(_fr);


        textReader.Mark();


        int numLines = getNumLines(textReader);


        textReader.Recall();


        String[] words = new String[numLines];

        for(int i=0;i<numLines;i++)
        {
            words[i] = textReader.readLine();
            System.out.println(words[i]);
        }
        //clears memory reserved for this buffered reader
        textReader.close();
FileReader\u fr=新的FileReader(FILEPATH);
BufferedReader textReader=新的BufferedReader(_fr);
text reader.Mark();
int numLines=getNumLines(文本阅读器);
textReader.Recall();
String[]words=新字符串[numLines];

对于(int i=0;我将遇到堆栈溢出,请回答寻求调试帮助的.问题(“此代码为什么不工作?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现该问题所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅。使用调试器跟踪执行。当((line=textReader.readLine())!=null时,您认为
如何{ <代码> >?我将声明您已经用GETNUMELIN()消耗了您的文件,因此在开始解析行时,您已处于文件末尾。请考虑使用类似于此的番石榴和代码:最终URL资源= Realth.GETRESULL(“路径/to/file .txt”);最后的列表行= Realth.Read Load(资源,字符集,Debug);欢迎使用Stack Overflow,请回答。寻求调试帮助的问题(“为什么此代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现该问题所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅。使用调试器跟踪执行。当((line=textReader.readLine())!=null时,您认为
如何{
是吗?我想说的是,您已经用getNu使用了您的文件