Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
throws IOException
{
InputStreamReader f= encoding==null?
new FileReader(file):
new InputStreamReader(
new FileInputStream(file),encoding);
StringBuffer sb= new StringBuffer();
try {
char[] buf= new char[32768];
int len;
while ((len=f.read(buf,0,buf.length))>=0) {
sb.append(buf,0,len);
}
return sb.toString();
} finally {
try {f.close();} catch (Exception e) {};
}
}
Прокомментирую основные тонкости.
Прежде всего нужно обратить внимание на параметр encoding. Чтобы прочитать текстовый файл, необходимо указать кодировку, в которой он записан. Функция допускает передачу null в качестве encoding, но это всего лишь означает, что файл будет прочитан в текущей кодировке операционной системы. Скажем, файл с русским текстом, записанный в традиционной для России кодировке Windows (формальное название «Cp1251»), прочитается правильно только при условии, что текущим языковым стандартом (Regional Options) является русский.
Все это означает, что параметр encoding можно не указывать в единственном случае: когда предполагается, что файл записан в текущей кодировке операционной системы. Если файл записан в какой-то другой кодировке, то он может быть прочитан в виде совершенно непредсказуемого «мусора». Это вполне допустимо, например, если речь идет о написании простого одноплатформенного текстового редактора типа Notepad.
Внимание! Передавая null в качестве encoding, не следует полагаться, что латинские символы из стандарта ASCII-7 (с кодами 0..127), если таковые в файле имеются, будут гарантированно прочитаны правильно. Более того, теоретически возможна ситуация, когда файл, содержащий только символы с кодами 0..127, будет прочитан неверно! В принципе в какой-то операционной системе может оказаться, что текущей кодировкой является UTF-8, UTF-16 или какая-нибудь новая кодировка, которая будет разработана в будущем и которая кодирует символы совершенно непредсказуемым способом. В данный момент на известных мне версиях Windows все кодировки, предлагаемые операционной системой, хранят латинские символы «как есть», согласно стандарту ASCII-7. Но никто не может гарантировать, что так будет всегда. Чтобы правильно читать файлы с латинскими символами, записанные в традиционном формате ASCII, нужно явно указывать кодировку «ASCII» или одно из стандартных 8-битовых расширений: «Cp1252» либо «ISO8859_1».