java - 初学者Q : how to open a file in Java and keep it open

标签 java file csv

这只是一个简单的 Java 命令行独立程序。

我想打开一个文件进行写入,并保持打开状态。我需要用人类可读的 ASCII 格式向其写入格式化的 float / double ,例如 CSV 文件。

我尝试了各种方法(1) (2) (3)我通过我最喜欢的搜索引擎找到了它们的形式:

try {
   // some file handle opening sequence
}
catch ( <some exception> ) {
  // do something
}
finally {
  // do something else
}

(...或者在第三个示例的情况下,文件打开/写入/关闭在抛出异常的函数内。)我意识到确保您已正确打开文件是一种很好的编程风格,但就我的目的而言,这真的没有必要。

无论如何,上述方法的问题是在 try{} block 之外,文件句柄被关闭。我想让它保持打开状态,因为我的代码的内核包含一个巨大的循环,我经历了 100,000 次(比如说),每次通过我都想输出一个 float (以 ASCII 格式)到文件。

对于上述形式,唯一的方法是将巨大的 for 循环包含在 try{} block 中。这看起来很傻。或者,我可以在循环中每次都重新打开文件,但这意味着额外的逻辑,第一次将文件作为"new"文件打开,并在所有后续时间附加。

有什么方法可以打开文件,让它保持打开状态以便偶尔写入,然后在我完成后关闭它?

类似于:

{
// open file "data.out"
}
for (i=0;i<100000;i++) {
   // do a lot of stuff
   //
   // calculate some quantity "x"
   //
   // output float "x" in ASCII form, appending it to data.out
}
{
// close data.out
}

Java 允许吗?谢谢。

最佳答案

当然,您可以将 FileWriter 简单地存储在某个地方,就像任何其他变量一样。例如,您可以将整个编写逻辑封装在它自己的类中,它为您指定的格式提供一个 write 方法。

但为什么它看起来很傻?也许这种方法可能会有所帮助...

public void methodA(File myFile) throws IOException{
  try ( FileWriter writer = new FileWriter( myFile ) ) {
     writeTo(writer);
  }
}

private void writeTo(FileWriter writer) throws IOException {
   for (i=0;i<100000;i++) {
   // do a lot of stuff
   //
   // calculate some quantity "x"
   //
   // output float "x" in ASCII form, appending it to data.out
}

这样,一种方法负责打开/关闭/异常,而另一种方法可以使用提供给它的 FileWriter 专注于重要的写入内容。

关于java - 初学者Q : how to open a file in Java and keep it open,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44286967/

相关文章:

java - 如何使用 Java Android SDK 做好实时数据流

java - Hibernate:将新数据库对象的一对多引用设置为另一个对象,而不先获取现有的对象

c++通过一个函数修改多个数组

python - 如何通过计划执行合并两个程序

java - WordNet:SenseRelate在Java中如何使用?

PHP - chmod 将无法正常工作

c - Linux/C : Writing command-line arguments to a text file as separate lines?

mysql - Sequelize - 如何使用 sequelize 将 csv 数据插入 mysql 中的多个表中

python - 如何从 csv 文件的两个特定列创建元组列表?

java - 如何使 DTD 文件中的属性列表可扩展