it-roy-ru.com

Как написать текстовый файл Java

Следующий код не создает файл (я его нигде не вижу) . Чего не хватает?

try {
    //create a temporary file
    String timeLog = new SimpleDateFormat("yyyyMMdd_HHmmss").format(
        Calendar.getInstance().getTime());
    File logFile=new File(timeLog);

    BufferedWriter writer = new BufferedWriter(new FileWriter(logFile));
    writer.write (string);

    //Close writer
    writer.close();
} catch(Exception e) {
    e.printStackTrace();
}
59
William Falcon

Я думаю, что ваши ожидания и реальность не совпадают (но когда они когда-либо;))

По сути, если вы думаете, что файл записан, а файл фактически записан, они не равны (хммм, возможно, мне следует написать оператор if;))

public class TestWriteFile {

    public static void main(String[] args) {
        BufferedWriter writer = null;
        try {
            //create a temporary file
            String timeLog = new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime());
            File logFile = new File(timeLog);

            // This will output the full path where the file will be written to...
            System.out.println(logFile.getCanonicalPath());

            writer = new BufferedWriter(new FileWriter(logFile));
            writer.write("Hello world!");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                // Close the writer regardless of what happens...
                writer.close();
            } catch (Exception e) {
            }
        }
    }
}

Также обратите внимание, что ваш пример перезапишет любые существующие файлы. Если вы хотите добавить текст в файл, вы должны сделать следующее:

writer = new BufferedWriter(new FileWriter(logFile, true));
114
MadProgrammer

Я хотел бы добавить немного больше к Ответу MadProgrammer.

В случае многострочной записи при выполнении команды 

writer.write(string);

можно заметить, что символы новой строки пропущены или пропущены в записанном файле, даже если они появляются во время отладки или если тот же текст печатается на терминале с помощью,

System.out.println("\n");

Таким образом, весь текст представляет собой один большой фрагмент текста, который нежелателен в большинстве случаев .. Символ новой строки может зависеть от платформы, поэтому лучше получить этот символ из системных свойств Java, используя

String newline = System.getProperty("line.separator");

а затем с помощью переменной newline вместо "\ n". Это позволит получить результат так, как вы хотите.

16
Menezes Sousa

В Java 7 теперь можно делать

try(BufferedWriter w = ....)
{
  w.write(...);
}
catch(IOException)
{
}

и w.close будет сделано автоматически

14
guest

Это не создание файла, потому что вы никогда не создавали файл. Вы сделали объект для этого. Создание экземпляра не создает файл.

File newFile = new File("directory", "fileName.txt");

Вы можете сделать это, чтобы сделать файл:

newFile.createNewFile();

Вы можете сделать это, чтобы создать папку:

newFile.mkdir();
4
smorce

Это работает со мной. Убедитесь, что вы добавляете ".txt" рядом с timeLog. Я использовал его в простой программе, открытой с Netbeans, и она записывает программу в основную папку (где находятся папки builder и src).

0
Giulio Dalicco

Использование Java 8 LocalDateTime и оператора Java 7 try-with:

public class WriteFile {

    public static void main(String[] args) {

        String timeLog = DateTimeFormatter.ofPattern("yyyyMMdd_HHmmss").format(LocalDateTime.now());
        File logFile = new File(timeLog);

        try (BufferedWriter bw = new BufferedWriter(new FileWriter(logFile))) 
        {
            System.out.println("File was written to: "  + logFile.getCanonicalPath());
            bw.write("Hello world!");
        } 
        catch (IOException e) 
        {
            e.printStackTrace();
        }
    }
}
0
xtra

Вы можете попробовать библиотеку Java. FileUtils , он имеет много функций, которые пишут в файлы. 

0
Snow