Java - открыть существующий файл или создать его, если не существует, используя потоки ввода-вывода - PullRequest
1 голос
/ 28 августа 2009

Я следовал инструкциям с веб-сайта Java (http://java.sun.com/docs/books/tutorial/essential/io/file.html#createStream) при создании или записи файла с использованием потока ввода-вывода. Однако код, который он предоставляет, кажется, нарушен в нескольких местах:

import static java.nio.file.StandardOpenOption.*;

Path logfile = ...;

//Convert the string to a byte array.
String s = ...;
byte data[] = s.getBytes();

OutputStream out = null;
try {
    out = new BufferedOutputStream(logfile.newOutputStream(CREATE, APPEND));
    ...
    out.write(data, 0, data.length);
} catch (IOException x) {
    System.err.println(x);
} finally {
    if (out != null) {
        out.flush();
        out.close();
    }
}

Например, Eclipse вылетает при импорте и при использовании класса Path для начинающих. Тем не менее, этот учебник, казалось, предоставил именно то, что я хочу сделать - я хочу записать в файл, если он существует (перезаписать), или создать файл, если он не существует, и в конечном итоге я буду писать с выходным потоком ( создается здесь с использованием метода .newOutputStream (). Таким образом, создание / запись с выходным потоком казалось вероятным кандидатом. Кто-нибудь знает, как исправить вышеперечисленное, чтобы оно работало, или лучше сделать то, что я хочу?

1 Ответ

3 голосов
/ 28 августа 2009

Кажется, что в этом примере используются API, которые не являются частью Sun Java 6.

Класс Path и пакет java.nio.file являются частью API, который будет добавлен в Sun JDK 7. Обратите внимание, что ссылка на документацию Path указывает на документацию API OpenJDK , версия Java с открытым исходным кодом Sun для разработки.

Таким образом, вы не можете использовать эти API, если используете обычную Sun Java 6.

Прочитайте предупреждение на начальной странице учебника :

Файловый ввод / вывод (с NIO.2)

Этот раздел обновляется, чтобы отразить особенности и соглашения предстоящего выпуска, JDK7. Вы можете загрузить текущий снимок JDK7 с java.net. Мы опубликовали эту предварительную версию, чтобы вы могли получать самую свежую информацию сейчас, чтобы вы могли рассказать нам об ошибках, упущениях или улучшениях, которые мы можем внести в это руководство.

В Sun Java 6 вы можете просто использовать FileOutputStream. Он автоматически создаст новый файл, если файл не существует, или перезапишет существующий файл, если он существует:

FileOutputStream out = new FileOutputStream("filename.xyz");
out.write(data, 0, data.length);

Примечание. Для написания текстовых файлов (что, как вам кажется, нужно делать), используйте Writer (например, FileWriter) вместо прямого использования OutputStream. Writer позаботится о преобразовании текста с использованием кодировки символов.

См. Документация по API Java SE 6 (особенно документы по пакетам java.io) для получения информации о том, что доступно в Java SE 6.

...