Как я могу прочитать файл .txt в одну строку Java, сохраняя при этом разрывы строк? - PullRequest
8 голосов
/ 25 мая 2011

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

private static String readFileAsString(String filePath) throws java.io.IOException{
    byte[] buffer = new byte[(int) new File(filePath).length()];
    BufferedInputStream f = null;
    try {
        f = new BufferedInputStream(new FileInputStream(filePath));
        f.read(buffer);
        if (f != null) try { f.close(); } catch (IOException ignored) { }
    } catch (IOException ignored) { System.out.println("File not found or invalid path.");}
    return new String(buffer);
}

... недостатком является то, что разрывы строк преобразуются в длинные пробелы, например "".

Я хочу преобразовать разрывы строк из \ n или \ r в
(тег HTML).

Заранее спасибо.

Ответы [ 7 ]

3 голосов
/ 25 мая 2011

Вы можете прочитать непосредственно в буфер и затем создать строку из буфера:

    File f = new File(filePath);
    FileInputStream fin = new FileInputStream(f);
    byte[] buffer = new byte[(int) f.length()];
    new DataInputStream(fin).readFully(buffer);
    fin.close();
    String s = new String(buffer, "UTF-8");
3 голосов
/ 25 мая 2011

Как насчет того, чтобы использовать сканер и самостоятельно добавлять перевод строки:

sc = new java.util.Scanner ("sample.txt")
while (sc.hasNext ()) {
   buf.append (sc.nextLine ());
   buf.append ("<br />");
}

Я не вижу, откуда у вас длинные пробелы.

1 голос
/ 25 мая 2011

Код будет читать содержимое файла по мере его появления в файле, включая разрывы строк. Если вы хотите изменить разрывы на что-то другое, например, отображать их в html и т. Д., Вам нужно будет либо обработать их, либо сделать это, прочитав файл построчно. Так как вы не хотите последнее, вы можете заменить свое возвращение следующим, которое должно сделать преобразование -

return (new String(buffer)).replaceAll("\r[\n]?", "<br>");
1 голос
/ 25 мая 2011

Вы можете добавить этот код:

return new String(buffer).replaceAll("(\r\n|\r|\n|\n\r)", "<br>");

Это то, что вы ищете?

0 голосов
/ 03 марта 2016

Я согласен с общим подходом @Sanket Patel, но при использовании ввода / вывода Commons вам, вероятно, понадобится File Utils .

Итак, ваше кодовое слово выглядит так:

String myString = FileUtils.readFileToString(new File(filePath));

Существует также другая версия для указания альтернативной кодировки символов.

0 голосов
/ 03 сентября 2013

Вы должны попробовать org.apache.commons.io.IOUtils.toString (InputStream is), чтобы получить содержимое файла в виде String.Там вы можете передать объект InputStream, который вы получите от

getAssets().open("xml2json.txt")    *<<- belongs to Android, which returns InputStream* 

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

String xml = IOUtils.toString((getAssets().open("xml2json.txt")));

Итак,

String xml = IOUtils.toString(*pass_your_InputStream_object_here*);
0 голосов
/ 25 мая 2011
StringBuilder sb = new StringBuilder();
        try {
            InputStream is = getAssets().open("myfile.txt");
            byte[] bytes = new byte[1024];
            int numRead = 0;
            try {
                while((numRead = is.read(bytes)) != -1)
                    sb.append(new String(bytes, 0, numRead));
            }
            catch(IOException e) {

            }
            is.close();
        }
        catch(IOException e) {

        }

ваш полученный String: String result = sb.toString();

, затем замените все, что вы хотите в этом result.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...