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


Автор: Serkys 29.5.2009, 12:08
Всем привет.
В Java я новичок, прошу помощи опытных программистов.

Пытаюсь создать файл и записать в него что-либо, но получаю исключение FileNotFoundException.
Код следующий:
Код

import java.util.*;
import java.io.*;

public class FirstSample
{

    public static void main(String[] args)
    {
        PrintWriter out = new PrintWriter("myfile.txt");
    }

}

Результат:
Код

C:\jdk\my>javac FirstSample.java
FirstSample.java:9: unreported exception java.io.FileNotFoundException; must be
caught or declared to be thrown
PrintWriter out = new PrintWriter("myfile.txt");
                           ^
1 error


Windows XP. Файл с таким именем не существует. Прописывание абсолютного пути ("c:\\myfile.txt") не помогает.

Если модифицировать код таким образом:
Код

import java.util.*;
import java.io.*;

public class FirstSample
{

    public static void main(String[] args) throws FileNotFoundException
    {
        PrintWriter out = new PrintWriter("myfile.txt");
        out.print("Hello World!");
    }

}

Файл создаётся, но пустой. Да и не нравится мне эта заглушка на исключение.

Автор: jcyber 29.5.2009, 12:21
попытайтесь сл. образом:
Код

new PrintWriter( new FileOutputStream("myfile.txt") )

Автор: LSD 29.5.2009, 12:27
Потоки обязательно надо закрывать.
Код

PrintWriter out = new PrintWriter("myfile.txt");
out.print("Hello World!");
out.close();


Если в середине работы надо удостовериться что данные записались на диск можно вызывать flush(). Перед close() это делать не обязательно, это будет сделано автоматически.

Автор: Serkys 29.5.2009, 12:34
Цитата(jcyber @  29.5.2009,  13:21 Найти цитируемый пост)
попытайтесь сл. образом:
Код

new PrintWriter( new FileOutputStream("myfile.txt") )


Результат тот же, только в этот раз исключение выбрасывает FileOutputStream.
Копания в исходиках FileOutputStream привели вот к этой строке:
Код

private native void open(String name) throws FileNotFoundException;

Куда дальше - не знаю.


LSD, спасибо, помогло. Подскажите, пожалуйста, почему выбрасывается исключение?

Автор: LSD 29.5.2009, 12:40
Цитата(Serkys @  29.5.2009,  12:34 Найти цитируемый пост)
Подскажите, пожалуйста, почему выбрасывается исключение?

Оно не выбрасывается, оно может быть выброшено. И конструкция:
Код

throws FileNotFoundException

предупреждает программиста об этом. Дальше ты должен решить или обработать его (использую try/catch) или предупредить того кто будет вызывать твоей метод, что он выбрасывает исключение.

Автор: Serkys 29.5.2009, 13:10
Получается, компилятор ругается не на то, что выброшено неотловленное исключение, а на то, что я не указал исключение в список потенциально выбрасываемых?
Исключения выбрасываются, если не ошибаюсь, на этапе выполнения, а не компиляции. Не ошибаюсь?

Автор: LSD 29.5.2009, 14:03
Цитата(Serkys @  29.5.2009,  13:10 Найти цитируемый пост)
Получается, компилятор ругается не на то, что выброшено неотловленное исключение, а на то, что я не указал исключение в список потенциально выбрасываемых?

По моему сообщение об ошибке:
Цитата
unreported exception java.io.FileNotFoundException; must be caught or declared to be thrown

достаточно ясно об этом говорит.


Цитата(Serkys @  29.5.2009,  13:10 Найти цитируемый пост)
Исключения выбрасываются, если не ошибаюсь, на этапе выполнения, а не компиляции.

Да, на этапе выполнения.

Я думаю тебе стоит почитать какую нибудь литературу про обработку исключений в Java.

Автор: Serkys 29.5.2009, 14:09
Цитата(LSD @  29.5.2009,  15:03 Найти цитируемый пост)
Я думаю тебе стоит почитать какую нибудь литературу про обработку исключений в Java. 

Обязательно почитаю, и не только это. Столько нового и интересного в этом языке smile


LSD, спасибо тебе большое за помощь.

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