Что самый простой путь состоит в том, чтобы считать файл в Строку? [дубликат]

256
задан tshepang 22 January 2014 в 22:36
поделиться

5 ответов

Да, вы можете сделать это в одну строку (хотя для надежной обработки IOException вы бы этого не хотели).

String content = new Scanner(new File("filename")).useDelimiter("\\Z").next();
System.out.println(content);

Здесь используется java.util.Scanner, который указывает ему разграничить входные данные с \Z, что является концом якоря строки. Это в конечном итоге делает входные данные одним фактическим токеном, который представляет собой весь файл, поэтому его можно прочитать одним вызовом next().

Существует конструктор, который принимает File и String charSetName (среди многих других перегрузок). Эти два конструктора могут бросать FileNotFoundException, но, как и все Scanner методы, никакие IOException не могут быть брошены вне этих конструкторов.

Вы можете запросить сам Scanner через ioException() метод, произошло ли IOException или нет. Вы также можете захотеть явно закрыть() сканер Scanner после чтения содержимого, поэтому, возможно, лучше всего хранить ссылку на Scanner в локальной переменной.

См. также

Похожие вопросы


Варианты использования сторонних библиотек

Для полноты картины, вот некоторые действительно хорошие варианты, если у вас есть эти очень авторитетные и очень полезные сторонние библиотеки:

Guava

com.google.common.io.Files содержит много полезных методов. Здесь уместны следующие:

  • String toString(File, Charset)
    • Используя заданный набор символов, считывает все символы из файла в String
  • List readLines(File, Charset)
    • . ... считывает все строки из файла в List, по одной записи на строку

Apache Commons/IO

org.apache.commons.io. IOUtils также предлагают подобную функциональность:

  • String toString(InputStream, String encoding)
    • Используя указанную кодировку символов, получает содержимое InputStream в виде String
  • List readLines(InputStream, String encoding)
    • . ... как (сырой) List из String, по одной записи на строку

Похожие вопросы

349
ответ дан 23 November 2019 в 02:44
поделиться

Вы можете использовать Apache Commons IO ..

FileInputStream fisTargetFile = new FileInputStream(new File("test.txt"));

String targetFileStr = IOUtils.toString(fisTargetFile, "UTF-8");
42
ответ дан 23 November 2019 в 02:44
поделиться

Не пишите свой собственный класс util для этого - я бы рекомендовал использовать Guava, который полон всякого добра. В этом случае вам нужен либо класс Files (если вы действительно просто читаете файл), либо CharStreams для более общего чтения. В нем есть методы для чтения данных в список строк (readLines) или полностью (toString).

В нем есть аналогичные полезные методы и для двоичных данных. А затем есть остальная часть библиотеки...

Я согласен, что раздражает, что в стандартных библиотеках нет ничего подобного. Черт возьми, просто возможность передать CharSet в FileReader сделала бы жизнь немного проще...

10
ответ дан 23 November 2019 в 02:44
поделиться

Другой альтернативный подход:

Как мне создать строку Java из содержимого файла?

Другой вариант - использовать служебные программы, предоставляемые библиотеками с открытым исходным кодом
http: //commons.apache.org/io/api-1.4/index.html?org/apache/commons/io/IOUtils.html

Почему java не предоставляет такой общий API-интерфейс использования?
a) , чтобы API оставались общими, чтобы кодирование, буферизация и т. Д. Выполнялись программистом.
б) заставить программистов выполнять некоторую работу и писать / совместно использовать библиотеки утилит с открытым исходным кодом: D; -)

7
ответ дан 23 November 2019 в 02:44
поделиться

К сожалению, нет.

Я согласен, что такая частая операция должна иметь более простую реализацию, чем копирование ввода построчно в цикле, но вам придется либо написать вспомогательный метод, либо использовать внешнюю библиотеку.

6
ответ дан 23 November 2019 в 02:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: