Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Считывание из файла построчно


Автор: xber9 3.8.2007, 12:53
  Вот смотрите есть такая функция  которая считывает текстовой файл и возвращает его содержимое как одну строку
Код

    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();

    }

Автор: LSD 3.8.2007, 13:13
Считывание построчно:
Код
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();

Автор: xber9 3.8.2007, 13:19
LSD извини я немного туплю
но как именно будет выглядеть полноцнная функция

если можешь поменяй мои так чтобы было правельно

Автор: LSD 3.8.2007, 13:24
Код
  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();
  }

Автор: xber9 3.8.2007, 13:32
огромнное псб
но по поводу функции записи 
как сделать её перегруженый ввариант
 чтобы она записывала в файл только одну строку а не массив

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

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

Автор: goodday1941 3.8.2007, 14:21
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();
  }


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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)