Java, Создать имя файла, используя данные и время - PullRequest
1 голос
/ 29 марта 2011

Я пытаюсь создать имя файла, которое использует дату и время из другого класса, чтобы назвать его, проблема в том, что класс вызывается так часто и когда создается новый файл. Я просто хотел создать файл один раз, а затем писать в него все время. Можно ли это сделать, так как я не могу понять, как это сделать?

Большое спасибо за любую помощь заранее!

public void fileOutputToFile(String hex) throws Exception{

    dateAndTime dat = new dateAndTime();
    String date = dat.currentDateAndTime();

    String fileInfo = hex;
    String fileName = (date+".tsv");

    try{
        PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(fileName, true)));
        out.print(fileInfo);
        out.print("\t");
        out.close();
    }catch (IOException e){
    }
}

Ответы [ 5 ]

1 голос
/ 29 марта 2011

Используйте средство форматирования даты, например SimpleDateFormat, чтобы отформатировать дату в строку, например, "гггг" сделать файл 2011.цв. Обратите внимание, что для этого требуется вернуть Date объект.

Если вы не хотите использовать файл на основе даты, сохраните имя файла где-нибудь. Но зачем вам тогда использовать дату в качестве имени файла?

Редактировать: для нового файла каждый час используйте формат, подобный следующему: yyyy-MM-dd_HH (в результате, например, 2011-03-29_17.tsv).

0 голосов
/ 29 марта 2011

Чтобы избежать создания нового файла с новой датой и временем каждый раз, когда клиентское приложение вызывает метод fileOutputToFile(), переместите все строки вверх, включая создание PrintWriter, вконструктор, так что конструктор открывает файл только один раз и метод fileOutputToFile() добавляет fileInfo к выходному потоку.

Обязательно добавьте метод close(), который закрывает поток PrintWriter, вызывая out.close().

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

public class MyLoggingClass {
    private PrintWriter out;

    public MyLoggingClass() throws IOException {
        dateAndTime dat = new dateAndTime();
        String date = dat.currentDateAndTime();
        String fileName = (date + ".tsv");
        out = new PrintWriter(
                new BufferedWriter(new FileWriter(fileName, true)));
    }

    public void fileOutputToFile(String hex) {
        String fileInfo = hex;
        out.print(fileInfo);
        out.print("\t");
    }

    public void close() {
        out.close();
    }
}
0 голосов
/ 29 марта 2011

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

Вы можете сделать следующее.

// not thread safe.
private static final DateFormat DF = new SimpleDateFormat("yyyyMMdd_HHmmss_SSS")

File file;
do {
    file = new File(DF.format(new Date())+".tsv");
} while(!file.createNewFile());
FileUtils.writeStringToFile(file, hex+"\t");

Другая проблема заключается в том, чтовы будете давать файлу новое имя при каждом обновлении.Если вы хотите сохранить одно и то же имя файла, вам нужно установить его в другом методе lazy, инициализировать значение из поля.

0 голосов
/ 29 марта 2011

Можете ли вы сохранить имя файла в сеансе? если имя файла существует в сеансе, используйте другой способ создания его из другого предложения ..

0 голосов
/ 29 марта 2011

При первом вызове вы можете сохранить имя файла в качестве члена класса.

Вы можете добавить файл к последующим вызовам с помощью конструктора FileWriter:

 public FileWriter( String fileName,
                    boolean append)

Если вы часто пишете, альтернативой является сохранение файла открытым и сохранение PrintWriter в качестве члена. Однако это может исключить некоторые внешние взаимодействия с файлом между записями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...