[Java] как проще всего загрузить файл в строку?

bastii

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

Svyatogor

Ну например так:

import java.io.*;

public class ReadFile {
public static void main(String [] args) {
try {
File src = new File(args[0]);
long len = src.length;
if (len > Integer.MAX_VALUE)
throw new IOException("File is too big to fit in string");
byte [] content = new byte[(int) len];
FileInputStream fis = new FileInputStream(src);
try {
(new DataInputStream(fis.readFully(content);
String result = new String(content);
System.out.println(result);
} finally {
try {
fis.close;
} catch (Exception ignore) {}
}
} catch (IOException e) {
e.printStackTrace;
}
}
}

Или так:

import java.io.*;

public class OtherRead {
public static void main(String [] args) {
FileReader fr = null;
try {
fr = new FileReader(args[0]);
BufferedReader br = new BufferedReader(fr);
StringBuilder sb = new StringBuilder;
String readed;
while (null != (readed = br.readLine {
sb.append(readed);
sb.append('\n');
}
String result = sb.toString;
System.out.println(result);
} catch (IOException e) {
e.printStackTrace;
}finally {
if (fr != null)
try {
fr.close;
} catch (Exception ignore){}
}
}
}

Во втором случае все варианты перевода строк будут приведены к '\n'.
А вообще, в обоих случаях стоило бы еще кодировку ввода-вывода установить в правильную.

Helga87

Как проще всего в Java загрузить содержимое текстового файла в строку?
не мог удержаться. В .net для выполнения этой задачи достаточно

string str = File.ReadAllText(filename);

bastii

Что-то очень сложными мне показали предложенные реализации для такой простой задачи. Вопрос эффективности не стоит, файл всегда маленький. Обошелся таким кодом:
     private static String readString(Reader reader) throws IOException {
StringBuilder sb = new StringBuilder;
int ch = reader.read;
while (ch >= 0) {
sb.appendchar) ch);
ch = reader.read;
}

return sb.toString;
}

Особо не разбирался в его корректном поведении в общем случае (у меня грузит но интересно узнать какие в этом коде могут вылезти проблемы, например, что там с кодировками?

Svyatogor

Если эффективность устраивает, то проблем нет ни с чем. Даже с кодировками, так как преобразованием данных в символы занимается Reader. Небольшие проблемы могут возникнуть там, где создается аргумент функции. Можно ли что-нибудь с этим сделать (и нужно ли) - зависит от используемого наследника. Например, FileReader не позволяет указать кодировку (используется кодировка по умолчанию хотя InputStreamReader позволяет. В большинстве случаев приложение правильно прочитает то, что записало на этом же компьютере (могут испортиться символы, которые не представимы в кодировке по-умолчанию. Cлучаи, когда сменилась системная раскладка, можно в рассчет не брать). Но вот если приложение с файлами переносится с одной системы на другую, возможны проблемы со чтением, в этом случае при работе с данными нужно указывать кодировку (например, java.lang.String.getBytes(String encoding java.io.InputStreamReader(java.io.InputStream in, String charsetName) и другие).

bastii

Ясно, спасибо, буду иметь в виду.
Оставить комментарий
Имя или ник:
Комментарий: