【问题标题】:java FileReader, Read text Line by Linejava FileReader,逐行读取文本
【发布时间】:2017-10-01 04:58:56
【问题描述】:

我有两节课。首先,TEXT 类:这里我读取了一个 6 行的文本文件。我只想逐行阅读,但这有效。但我想从第三行开始,也跳过最后一行,我只想要以开头的行

这是文本文件代码。

<?xml version="1.0" encoding="iso-8859-1"?>
<ICONS ERROR="false" USERNAME="WAZ" FORMAT="FLAT" RECORDS="3">
<icon ID="55"  NAM="A" />
<icon ID="87"  NAM="B" />
<icon ID="53"  NAM="C" />
</ICONS>

这是来自文件阅读器的代码:

    package packagechain;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Iterator;
import java.util.stream.Stream;

   public class Text {

     String fileName;
     FileReader fr;
     BufferedReader in;
     Stream<String> lines;
     Iterator<String> l;
     boolean hasLine;

    public Text() throws FileNotFoundException{
         fileName = "E:/test30.xml";
         fr = new FileReader(fileName);
         in = new BufferedReader(fr);   
         lines = in.lines();
         l = lines.iterator();
         hasLine = true;
    }

    public String nextline() {
        String nl;

        if(l.hasNext()) {
            nl = l.next();
            //System.out.println(""+nl);

        }
        else {
            System.out.println("No new line!");
            hasLine = false;
            nl=null;
        }
        return nl;
    }
    }

这是我可以从文本文件中编辑我想要的字符串的代码,我使用“子字符串”并且这有效。但是如果到最后一行在特定子字符串中没有值,则会出现错误....

如果我删除第 1 行和第 2 行以及文本文件中的 alst 行,则会出错: “线程“主”java.lang.StringIndexOutOfBoundsException 中的异常:字符串索引超出范围:12 在 java.lang.String.substring(String.java:1963) 在 packagepackagechain.test4.main(test4.java:18)"

如果我在文本文件中添加第 1 行和第 2 行以及最后一行,则会出错 ..

错误: 线程“主”java.lang.NullPointerException 中的异常 在 packagepackagechain.test4.main(test4.java:16)

and here is the code:

 package packagechain;

import java.io.FileNotFoundException;

public class test4 {

    public static void main(String[] args) {
         Text m;
          String s;

          try {
             m = new Text();
             while(m.hasLine) {
                s = m.nextline();

                String r = s.substring(10,12);

                System.out.println(r);

             }
          } catch (FileNotFoundException e) {
             System.out.println("File not found!");
        }


    }
}   

【问题讨论】:

    标签: java exception while-loop filereader


    【解决方案1】:

    在您的程序中,每个迭代文本类对象和缓冲区读取器对象都被重新分配,因此它们只返回第一行

    package packagechain;
    
    import java.io.BufferedReader;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    
    public class Text {
    
    
    public BufferedReader getBufferReader() {
    
         BufferedReader in;
    
        String fileName = "...4-line.txt";
    
        FileReader fr = null;
    
        try {
            fr = new FileReader(fileName);
            in = new BufferedReader(fr);
    
    
    
        }  
        catch(FileNotFoundException fnfe){
            System.out.println("Can't open");
    
        }
        catch(IOException ioe){
            System.out.println("No new line!");
        }
        return  in;
        }
    public void readLine(BufferedReader in){
        try {
     String line = in.readLine();
    
    
            System.out.println("Next line; "+line);
    
        catch(IOException ioe){
            System.out.println("No new line!");
        }
     }
    }
    

    二等舱代号为:

    package packagechain;
    
    public class MainProgram {
    
      public static void main(String[] args) {
        while(true){
          Text m = new Text();
          BufferedReader in=m.getBufferReader();
          m.readLine(in);
    
          //Here I edit in future these Line , so it's important that i get line by line from my other class, becaus I Have to edit each line itself!
        }
      }
    }
    

    【讨论】:

    • 好的,当我编写第一个代码时,我遇到了一些错误。 in Line: public void readLine(BufferReader in){ .... error: BufferReader cannot be resolved to a type
    • 并且我必须从该行关闭剪辑的“}”有问题:public BufferedReader getBufferReader() {
    • 导入 java.io.FileReader;使用此导入
    • 是的,我已经有了。你确定它叫 BUfferReader 而不是 BufferedReader 吗?
    • 没问题,但是在第二行总是有错误:m.nextline(in);错误是:Text 类型的方法 nextline(BufferedReader) 未定义
    【解决方案2】:

    您的 Text 类只读取第一行,而您的主类正在为每次迭代实例化一个新的 Text 对象。 您的 Text 类可以使用方法行来读取所有文件行,然后遍历它们并打印每一行。

    package packagechain;
    
    import java.io.BufferedReader;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.util.Iterator;
    import java.util.stream.Stream;
    
    public class Text {
         String fileName;
         FileReader fr;
         BufferedReader in;
         Stream<String> lines;
         Iterator<String> l;
         boolean hasLine;
    
        public Text() throws FileNotFoundException{
             fileName = "....4-line.txt";
             fr = new FileReader(fileName);
             in = new BufferedReader(fr);   
             lines = in.lines();
             l = lines.iterator();
             hasLine = true;
        }
    
        public String nexline() {
    
            if(l.hasNext()) {
                String nl = l.next();
                System.out.println("Next line; "+nl);
                return nl
            }
            else {
                System.out.println("No new line!");
                hasLine = false;
                return null;
            } 
        }    
    }
    

    主类:

    package packagechain;
    
    public class MainProgram {
    
      public static void main(String[] args) {
    
          Text m;
          String s;
          try {
             m = new Text();
             while(m.hasLine) {
                s = m.nexline();
                //EXAMPLE: for each line, print a substring starting from its third character
                if(s != null) System.out.println(s.substring(2));
                //Here I edit in future these Line , so it's important that i get line by line from my other class, becaus I Have to edit each line itself!
             }
          } catch (FileNotFoundException e) {
             System.out.println("File not found!");
        } 
    
        }
    }
    

    【讨论】:

    • 好的,我测试它,但这给了我整个文本,我只想要 1 行,如果它重复 while 或 for 循环,它应该得到下一行....
    • 我的问题是我怎样才能在我的主程序中获得 1 行在一个 while 循环中,我必须在这里每行做几个字符串我希望该行作为单个字符串。当循环结束时,它再次开始循环,然后我使用了我的文本的第二行......等等......你明白我的问题是什么吗??
    • 或者是否有任何函数可以让我计算文本文件中的行数,在我的主程序中我可以计算每个通过的循环,并且在每个循环之后它也会得到下一行??
    • 好的,我已经编辑了我的答案,希望能理解这个请求。现在您编写的方法只是打印该行而不返回它,它是无效的。我想您知道要获取 String 行以对其执行一些操作,您必须返回而不只是打印它。
    • 好的,谢谢,但是如果我让它在我的主程序中循环 2 次,那么它应该只显示我的文本文件中的前 2 行...对吗???但是使用您的代码,它向我显示了整个文本文件 2 次 ....
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-24
    • 2020-03-10
    • 1970-01-01
    相关资源
    最近更新 更多