Использование BufferedReader для чтения текстового файла
У меня возникли проблемы с использованием BufferedReader
Я хочу напечатать 6 строк текстового файла:
public class Reader {
public static void main(String[]args) throws IOException{
FileReader in = new FileReader("C:/test.txt");
BufferedReader br = new BufferedReader(in);
while (br.readLine() != null) {
System.out.println(br.readLine());
}
in.close();
}
Теперь из того, что я могу собрать каждый раз, когда я вызываю метод readLine(), он автоматически переходит к следующей строке.
Поэтому я не могу использовать условие br.readLine()!= null, так как он уже продвигает его на одну строку, и я получаю вывод:
Line 2
Line 4
Line 6
Какое условие я использую для проверки наличия новой строки в текстовом поле.
Спасибо заранее!
Ответы
Ответ 1
В этом проблема:
while (br.readLine() != null) {
System.out.println(br.readLine());
}
У вас есть два вызова readLine
- первый проверяет только там, где есть строка (но читает ее и отбрасывает), а вторая читает следующую строку. Вы хотите:
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
Теперь мы вызываем только readLine()
один раз за итерацию цикла и используем строку, которую мы читаем как для "закончили ли мы?". и "распечатать линии".
Ответ 2
Вы читаете цикл line
через while
, и через цикл вы читаете следующую строку, поэтому просто читайте его во время цикла
String s;
while ((s=br.readLine()) != null) {
System.out.println(s);
}
Ответ 3
Вы можете присвоить результат br.readLine()
переменной и использовать ее как для обработки, так и для проверки:
String line = br.readLine();
while (line != null) { // You might also want to check for empty?
System.out.println(line);
line = br.readLine();
}
Ответ 4
Возможно, вы имеете в виду это:
public class Reader {
public static void main(String[]args) throws IOException{
FileReader in = new FileReader("C:/test.txt");
BufferedReader br = new BufferedReader(in);
String line = br.readLine();
while (line!=null) {
System.out.println(line);
line = br.readLine();
}
in.close();
}
Ответ 5
Try:
String text= br.readLine();
while (text != null)
{
System.out.println(text);
text=br.readLine();
}
in.close();
Ответ 6
или
public String getFileStream(final String inputFile) {
String result = "";
Scanner s = null;
try {
s = new Scanner(new BufferedReader(new FileReader(inputFile)));
while (s.hasNext()) {
result = result + s.nextLine();
}
} catch (final IOException ex) {
ex.printStackTrace();
} finally {
if (s != null) {
s.close();
}
}
return result;
}
Это также первая строка.
Ответ 7
вы можете сохранить его в массиве, а затем использовать любую нужную строку.
это фрагмент кода, который я использовал для чтения строки из файла и сохранил ее в массиве строк, надеюсь, что это будет полезно для вас:)
public class user {
public static void main(String x[]) throws IOException{
BufferedReader b=new BufferedReader(new FileReader("<path to file>"));
String[] user=new String[30];
String line="";
while ((line = b.readLine()) != null) {
user[i]=line;
System.out.println(user[1]);
i++;
}
}
}
Ответ 8
private void readFile() throws Exception {
AsynchronousFileChannel input=AsynchronousFileChannel.open(Paths.get("E:/dicom_server_storage/abc.txt"),StandardOpenOption.READ);
ByteBuffer buffer=ByteBuffer.allocate(1024);
input.read(buffer,0,null,new CompletionHandler<Integer,Void>(){
@Override public void completed( Integer result, Void attachment){
System.out.println("Done reading the file.");
}
@Override public void failed( Throwable exc, Void attachment){
System.err.println("An error occured:" + exc.getMessage());
}
}
);
System.out.println("This thread keeps on running");
Thread.sleep(100);
}