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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> finally и I/O. помогите разобраться 
:(
    Опции темы
ci5
Дата 19.11.2011, 09:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Никак не допрет как сделать правильно. Есть код. 
Код

public static void main(String[] args) {
        int[] array=new int[10];
        try{
            FileWriter fw=new FileWriter("c:\\file.txt");
            PrintWriter pw=new PrintWriter(fw);
            for (int i = 0; i <  10; i++) {
                array[i]=i;
                pw.println(array[i]);
            }
            System.out.println("данные успешно записались");
            pw.close();
        } catch(IOException e){
            System.out.println("неверный ввод");
        }
        finally {
            
        }

который создает файл и записывает туда числа. PrintWriter нам надо закрывать в любом случае, как с исключением, так и без него. Конечно логично это сделать в finally, но там мне выводит ошибку 
Цитата
<identifier> expected

not a statement

выше try не удается описать, ибо FileWriter должен обрабатывать IOException. Подскажите как сделать чтобы в блоке finally я мог закрывать поток. 
PM MAIL   Вверх
Stolzen
Дата 19.11.2011, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

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



Код

public static void main(String[] args) {
    int[] array=new int[10];
    FileWriter fw = null;
    PrintWriter pw = null;

    try{
        fw = new FileWriter("c:\\file.txt");
        pw = new PrintWriter(fw);
        for (int i = 0; i <  10; i++) {
            array[i]=i;
            pw.println(array[i]);
        }
        System.out.println("данные успешно записались");
        
    } catch(IOException e){
        System.out.println("неверный ввод");
    }
    finally {
     pw.close();

     try {
            fw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}


Это сообщение отредактировал(а) Stolzen - 19.11.2011, 12:35


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
ci5
Дата 19.11.2011, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Немного не понял почему pw.close(); идёт в конце. я так понимаю pw.close должен вызывать flush и сбрасывать всё с буфера в файл, если используется к примеру BufferedWriter. А если мы уже до этого файл закрыли, то и не запишем ничего, что осталось в буфере. 
PM MAIL   Вверх
Stolzen
Дата 19.11.2011, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

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



Поменял местами. В принципе я просто хотел показать, как в finally закрывать поток, поэтому не заморачивался о порядке. Кстати, забыл. Еще проверку на null в finally нужно добавить.


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
ci5
Дата 19.11.2011, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ясно. Я не то чтобы указать на ошибку, просто хотел узнать правильно ли я этот момент понимаю, с буфером. Спасибо за помощь, всё работает  smile 
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.0639 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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