我正在尝试创建一个文件名,该文件名使用来自另一个类的日期和时间来命名它,问题是每隔一段时间调用一次该类,并且创建一个新文件。我只是想创建一次文件,然后一直写入它。有可能这样做,因为我无法解决如何?
非常感谢您提前提供任何帮助!
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){
}
}
答案 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();
}
}