Java,使用数据和时间创建文件名

时间:2011-03-29 15:30:09

标签: java file date time

我正在尝试创建一个文件名,该文件名使用来自另一个类的日期和时间来命名它,问题是每隔一段时间调用一次该类,并且创建一个新文件。我只是想创建一次文件,然后一直写入它。有可能这样做,因为我无法解决如何?

非常感谢您提前提供任何帮助!

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 个答案:

答案 0 :(得分:1)

使用SimpleDateFormat之类的日期格式化程序将日期格式化为字符串,例如“yyyy”制作一个文件2011.tsv。请注意,这需要返回Date个对象。

如果您不想使用基于日期的文件,请将文件名存储在某处。但是,为什么你会在第一时间使用日期作为文件名?

编辑:对于每小时的新文件,请使用如下格式:yyyy-MM-dd_HH(例如,将导致2011-03-29_17.tsv)。

答案 1 :(得分:0)

在第一次调用时,您可以将文件名存储为类的成员。

您可以使用FileWriter构造函数在后续调用中附加到该文件:

 public FileWriter( String fileName,
                    boolean append)

如果经常写,另一种方法是保持文件打开,将PrintWriter存储为成员。但是,这可能会阻止在写入之间与文件进行某些外部交互。

答案 2 :(得分:0)

您可以在会话中保存文件名吗?如果文件名存在于会话使用中,则另一个方法是从另一个clases中创建它。

答案 3 :(得分:0)

单独使用时间的问题是您仍然可以同时创建多个创建。

您可以执行以下操作。

// 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");

另一个问题是,您将在每次更新时为该文件指定一个新名称。如果您要保留相同的文件名,则需要使用另一种惰性方法将其设置为初始化字段中的值。

答案 4 :(得分:0)

为了避免每次客户端应用程序调用方法fileOutputToFile()时创建具有新日期和时间的新文件,请将所有行向上移动到包括创建PrintWriter到构造函数,以便构造函数只打开文件一次,方法fileOutputToFile()fileInfo附加到输出流。

确保添加方法close(),通过调用out.close()关闭PrintWriter流。

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();
    }
}