使用Java写入txt文件时是否有行限制?

使用Java写入txt文件时是否有行限制?,java,line,limit,Java,Line,Limit,我试图通过将http响应写入txt文件来记录它们 我在Java中使用FileWriter,但不幸的是,当超过行数(例如1000行)或txt文件大小(例如80kb)时,它会自动删除以前的内容并写入新内容 每次超过限制时都会发生这种情况 try{ File file = new File("response.txt"); file.createNewFile(); FileWriter writer = new FileWriter(file,true); write

我试图通过将http响应写入txt文件来记录它们

我在Java中使用FileWriter,但不幸的是,当超过行数(例如1000行)或txt文件大小(例如80kb)时,它会自动删除以前的内容并写入新内容

每次超过限制时都会发生这种情况

try{
    File file = new File("response.txt");
    file.createNewFile();
    FileWriter writer = new FileWriter(file,true);
    writer.write(+System.currentTimeMillis()+"\t"+response+"\n");
    writer.flush();
    writer.close();}
catch(IOException ioe){
    System.out.println("\nError");}

我猜可能是因为:

  • 磁盘空间不足
  • file.createNewFile()
    用于每一行,因此不可靠
  • 您可以为每条线打开和关闭流
  • 在多线程环境中调用此代码而不进行同步
在这里,每次调用此方法时都会创建一个新文件

FileWriter writer = new FileWriter(file,true);
在这里,您试图附加到一个现有文件,该文件由于先前的
file.createNewFile()
而不再存在。因此,每次调用此方法时,都会丢失以前的所有输出并写入新文件。移除它

这种事后诸葛亮的猜测总是在任何地方完全浪费时间和空间
newfilewriter()
无论如何都必须这样做,而您只是强迫它发生两次:在本例中,是错误的

事实上,您应该尝试保持文件打开,而不是每次调用此方法时都重新打开和重新关闭它。你所做的是非常低效的。除了不工作

注意:当您收到异常时,请打印该异常。不仅仅是
“错误”
。否则,您将在这里询问为什么它会打印“错误”,因为您没有正确编写代码。

请尝试以下操作:

BufferedWriter out = null;
try
{
    out = new BufferedWriter(new FileWriter(file, true));
    out.append(response);
    out.newLine();
} catch(Exception e)
{
    e.printStackTrace();  // if needed
    out.append("Error");
    out.newLine();
}
finally
{
    ResourceUtil.closeQuietly(out);
}

一个文件的限制通常是你有多少磁盘空间。需要注意的是,对于每一个日志操作,打开、写入和关闭这个文件在性能上可能非常昂贵。你能让这个句柄保持打开状态并在必要时写入吗?@evag0r你是在为每个日志条目一遍又一遍地执行这个代码吗?是的,基本上每个新请求都会在while循环中执行这个代码,直到结束。所以我可以在while循环后关闭文件?这是因为每次都在使用
file.createNewFile()
,而且它是可靠的。为什么要这样做?单纯的代码不是答案。你必须解释。
BufferedWriter out = null;
try
{
    out = new BufferedWriter(new FileWriter(file, true));
    out.append(response);
    out.newLine();
} catch(Exception e)
{
    e.printStackTrace();  // if needed
    out.append("Error");
    out.newLine();
}
finally
{
    ResourceUtil.closeQuietly(out);
}