Показать сообщение отдельно
Старый 20.02.2009, 13:46   #9
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Чтение и запись файлов

// Открываем ресурс data.txt
InputStream is=getClass().getResourceAsStream("/data.txt");
// Теперь можно читать из потока is
// Например, нужно считать 5 байт в массив
// Создаём массив
byte[] by=null;
// Инициализируем массив с пятью ячейками
by=new byte[5];
// Считываем из потока в массив 5 байт начиная с нулевой ячейки
is.read(by,0,5);
// Создаём строковую переменную
String str="";
// Теперь считаем из потока ещё 5 байт, но теперь в строку
for(int i=0;i<5;i++){
  
str=str+(char)is.read();
}
// Не забываем закрыть поток
is.close(); 
Если ресурс прочитали до конца и пытаться прочитать дальше, то is.read() будет возвращать -1. По умолчанию is.read() возвращает int, но можно на лету переделать тип в char, как в примере выше (char)by.read().

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

StringBuffer s=new StringBuffer();
int b;
String str;
InputStream is=getClass().getResourceAsStream("/data.txt");
while((
b=is.read())!=-1s.append((char)b);
is.close();
str=s.toString(); 
Текст считывается и приводится к юникоду самой джавой и все символы будут имеют вид ASCII, то есть русские буквы не будут выглядеть русскими. Для этого нужно перекодировать самому. Тут на форуме эта тема обсуждалась несколько раз.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Spiderman (20.02.2009)