想要根据文本文件中的行打印数据

时间:2016-07-28 13:28:07

标签: java

我有一个像这样的数据的文本文件

username=Ayyappa,password=123
username=venkata,password=456
username=Bhargav,password=789
username=Rama,password=158
username=Pusarla,password=968

我想打印第2行的数据 (我的预期输出是用户名= venkata,密码= 456)

写的功能:

public class TestDataReader {
public static String getrowvalue(String FileName, int rownum) throws IOException{

        FileReader fr = new FileReader(FileName);
        BufferedReader br = new BufferedReader(fr);
        String lineString = null;
        while((lineString = br.readLine())!= null){
            int counter = 1;
            if(counter == rownum){
                System.out.println(lineString);
                counter ++;
            }
        }

        return lineString;
    }

}

我在另一个班级中调用了这个函数

TestDataReader.getrowvalue(“F:\ WS_Finsys_Ayyappa \ Ejagruti \ TestData \ login.txt”,2);

但是当我调用这个函数时,它会打印所有的行数据但不会传输我传递的行数据,在这种情况下,我通过了rownum 2来获取行数据

2 个答案:

答案 0 :(得分:0)

你的错误在于:每次循环时只需刷新counter值:

int counter = 1;

所以改成它:

 int counter = 1;
 while((lineString = br.readLine())!= null){
        if(counter == rownum){
            System.out.println(lineString);
        }
        counter++;
    }

UPD :另外,正如@Lemm Ras所提到的,您必须在counter语句之外移动if增量。

答案 1 :(得分:0)

Java 8解决方案:

适用于小文件:

String line32 = Files.readAllLines(Paths.get("file.txt")).get(32)

适用于大型文件:

try (Stream<String> lines = Files.lines(Paths.get("file.txt"))) {
    line32 = lines.skip(31).findFirst().get();
}

一个简单的,Java&lt; 8解决方案:

public String readLine(int line){
        FileReader tempFileReader = null;
        BufferedReader tempBufferedReader = null;
        try { tempFileReader = new FileReader(textFile); 
        tempBufferedReader = new BufferedReader(tempFileReader);
        } catch (Exception e) { }
        String returnStr = "ERROR";
        for(int i = 0; i < line - 1; i++){
            try { tempBufferedReader.readLine(); } catch (Exception e) { }
        }
        try { returnStr = tempBufferedReader.readLine(); }  catch (Exception e) { }

        return returnStr;
    }