Как вы читаете текстовый файл и печатаете его в окне консоли? Джава

Я хотел бы прочитать весь текстовый файл и сохранить все его содержимое в одну строку. Затем я хотел бы напечатать строку в окне консоли. Я пробовал это:

import java.util.Scanner;
import java.io.*;

public class WritingTextFiles{

    public static void main (String [] args) throws IOException{
        FileWriter fw= new FileWriter("testing.txt");  
        Scanner in= new Scanner (System.in);
        String testwords=in.nextLine();  
        fw.write(testwords);  
        BufferedReader r = new BufferedReader( new FileReader( "testing.txt" ) );  
        System.out.print(r);  
        fw.close();  
    }
}

Единственное, что выводится в окно консоли, это java.io.BufferedReader@18fb397.

Кто-нибудь может объяснить это новичку вроде меня? У меня очень мало опыта, но я, безусловно, готов учиться. Я открыт для любых предложений. Заранее спасибо!


person user1299661    schedule 24.04.2012    source источник
comment
Посмотрите на методы read() и readLine() в API класса BufferedReader: docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html   -  person Hunter McMillen    schedule 25.04.2012


Ответы (2)


Причина, по которой java.io.BufferedReader@18fb397 выводится на консоль, заключается в том, что вы указываете ссылку на буферизованный считыватель в качестве аргумента для печати, а не строку, которую хотите напечатать.

BufferedReader r = new BufferedReader( new FileReader( "testing.txt" ) );
System.out.print(r);

должно быть:

BufferedReader r = new BufferedReader( new FileReader( "testing.txt" ) );
String s = "", line = null;
while ((line = r.readLine()) != null) {
    s += line;
}
System.out.print(s);

Обратите внимание, что мы фактически читаем строки файла и сохраняем их во временной переменной, а затем добавляем эту переменную в s. Затем мы печатаем s, а не BufferedReader.

И последнее замечание: разумно закрыть файл, когда вы закончите, вы вызываете fw.close(), но вы должны были вызвать его сразу после написания тестовых слов. Это делается для того, чтобы убедиться, что FileWriter действительно записал строку.

person Terraego    schedule 24.04.2012
comment
Программа не компилировалась. Я получаю сообщение об ошибке несовместимых типов, для которой требуется логическое значение в строке: while((line=r.readLine()!=null) { Можете ли вы мне помочь? - person user1299661; 25.04.2012
comment
Конечно, извини, приятель, я написал этот код, не тестируя его. Я отредактировал свой исходный ответ, чтобы правильно скомпилировать :) - person Terraego; 25.04.2012
comment
У меня есть и спасибо! Есть ли способ прочитать файл и сохранить его в типе, отличном от строки, которую также можно прочитать в массиве? У меня есть программа, которая берет содержимое файла и организует его в массив, затем принимает ввод пользователя и сравнивает его с компонентами файла, но со строкой требуется огромное количество времени для работы с большим текстом. файлы. Любой совет? - person user1299661; 26.04.2012
comment
О, звучит как хороший проект, вы можете читать фрагменты файла, скажем, 250 строк, и сохранять их в массиве или, возможно, в своем собственном объекте фрагмента. Затем просто сравните фрагменты, которые вы читаете, вам не нужно сразу загружать весь текстовый файл, и это будет очень хорошо масштабироваться. - person Terraego; 26.04.2012
comment
Как бы вы прочитали определенное количество строк из файла? - person user1299661; 26.04.2012
comment
Ну, это немного сложнее, и я чувствую, что вы должны задать это в другом вопросе. Это включает в себя ограничение вашего цикла и сохранение где-то значения смещения, а затем анализ фрагментов. - person Terraego; 26.04.2012

Если это относительно небольшой файл, однострочный способ Java 7+ сделать это:

System.out.println(new String(Files.readAllBytes(Paths.get("testing.txt"))));

Если вы просто хотите прочитать его в строку, это также просто:

String s = new String(Files.readAllBytes(Paths.get("testing.txt")));

См. https://docs.oracle.com/javase/7/docs/api/java/nio/file/package-summary.html для получения более подробной информации.

Ваше здоровье!

person Ari    schedule 21.09.2016