Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Считывание из файла построчно 
V
    Опции темы
xber9
  Дата 3.8.2007, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 21.1.2007

Репутация: нет
Всего: нет



  Вот смотрите есть такая функция  которая считывает текстовой файл и возвращает его содержимое как одну строку
Код

    public static String readFile(File file) throws FileNotFoundException,
            IOException, UnsupportedEncodingException {
        long dinnaFaila = file.length();
        String text = "";
        Reader in;
        in = new FileReader(file); //FileNotFoundException
        char[] buff = new char[(int) dinnaFaila];
        int numberOfChars;
        Boolean b=true;
        while (b) {
            numberOfChars = in.read(buff);
            if (numberOfChars != -1||numberOfChars==0){
            b=false;
            }
            text += new String(buff, 0, numberOfChars); //IOException//"Cp1251" etc.
        }
        return text;

    }


Не поможете переделать это так чтобы  файл  считывался построчно и в результате возвращался   массив строк  где каждый элемент массива  содержат  строку файла 
Сам пробовал – не получается 

И ещё как сделать так чтобы следующая функция записывала строку в файл в кодировке  UTF-8 а не в  Cp1251
+ первая  функция считывала правильно  UTF-8

Код

 public static void RecordInAFile(File putKFailyDlyaZapisi,
                                     String textDlyaZapisi) throws
            FileNotFoundException, UnsupportedEncodingException, IOException {

        // эта переменая открывает поток в файл  для записи
        FileOutputStream fos = null;
        // создаем саму переменную
        fos = new FileOutputStream(putKFailyDlyaZapisi);

        //записать можно только байтовый массив, но не строку
        //создаем из нашей строки данный байтовый массив
        // в скобках указана кодировка для правильной записи в файл русково текста
        byte[] result = textDlyaZapisi.getBytes(
                        /* функция определения кодировки для записи файла*/
                                System.getProperty("file.encoding"));

        // запись расшифрованого текста в файл
        fos.write(result);

        // если переменная fos открыла поток для записи
        if (fos != null)
            // то поток закрывается
            fos.close();

    }

PM MAIL   Вверх
LSD
Дата 3.8.2007, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Считывание построчно:
Код
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("file.txt"), "UTF-8"));
ArrayList<String> strings = new ArrayList<String>();
String str;
while((str = reader.readLine()) != null)
  strings.add(str);
reader.close();


Запись в нужной кодировке:
Код
ArrayList<String> strings = new ArrayList<String>();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("another-file.txt"), "UTF-8"));
for(String s : strings)
{
  writer.write(s);
  writer.newLine();
}
writer.close();



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
xber9
Дата 3.8.2007, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 21.1.2007

Репутация: нет
Всего: нет



LSD извини я немного туплю
но как именно будет выглядеть полноцнная функция

если можешь поменяй мои так чтобы было правельно
PM MAIL   Вверх
LSD
Дата 3.8.2007, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Код
  public String[] readStrings(File file) throws IOException
  {
    BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));
    ArrayList<String> strings = new ArrayList<String>();
    String str;
    while((str = reader.readLine()) != null)
      strings.add(str);
    reader.close();
    return strings.toArray(new String[strings.size()]);
  }

  public void writeString(File file, String[] strings) throws IOException
  {
    BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF-8"));
    for(String s : strings)
    {
      writer.write(s);
      writer.newLine();
    }
    writer.close();
  }



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
xber9
Дата 3.8.2007, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 21.1.2007

Репутация: нет
Всего: нет



огромнное псб
но по поводу функции записи 
как сделать её перегруженый ввариант
 чтобы она записывала в файл только одну строку а не массив

да кстати  что такое  <String>  вперые всречаю такое написание 

и ещё по первой фукции как сделать вариант чтобы считывалось в 1 строку и в правельно понимал кодитровку UTF-8

Это сообщение отредактировал(а) xber9 - 3.8.2007, 13:43
PM MAIL   Вверх
goodday1941
Дата 3.8.2007, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 709
Регистрация: 16.7.2006
Где: Украина, Киев

Репутация: 1
Всего: 9



ArrayList<String> значит что эта коллекция содержит в себе обьекты класса String

Добавлено @ 14:22
Цитата(xber9 @  3.8.2007,  13:32 Найти цитируемый пост)
как сделать её перегруженый ввариант чтобы она записывала в файл только одну строку а не массив


Код

public void writeString(File file, String s) throws IOException
  {
    BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF-8"));
     writer.write(s);
    writer.close();
  }



Это сообщение отредактировал(а) goodday1941 - 3.8.2007, 14:24


--------------------
SCJP 6
PM MAIL ICQ Skype GTalk   Вверх
niasilil
Дата 3.8.2007, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 4.6.2007
Где: USA

Репутация: 8
Всего: 9



Если эту функию будут использовать много раз и на больших файлах, то я бы заменил String на StringBuilder. Нехорошо как то образовывать прорву неубиваемых String объектов. 


--------------------
SCJP 5.0, SCJD
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.2418 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.