文件输入附加

时间:2015-06-23 11:05:34

标签: java file-io

我正在尝试将一些坐标写入文件,然后将其作为字符串读取。所以我需要将它们写入附加文件...没有空格或新行,但我的代码只写第一个坐标,即pos_Let,但根本不写pos_Num,不是即使有空间或新线路。

那么如何让代码写入文件pos_LetposNum呢?显然我的意思是他们的参考文献;)..提前谢谢

protected  void writeCoordtoFile () throws IOException
  {
       File file = new File("FermiPresentCoord.txt");
       boolean yes = file.createNewFile() ;
       //boolean yes = exists();
       if (yes == true)
       {
       // create a FileWriter Object
       FileWriter writer = new FileWriter(file, true);

       // Writes the content to the file
       writer.write("");
       writer.flush();
       writer.write(pos_Let);
       writer.flush();
       writer.write(pos_Num);
       writer.close();
       }
       else
       {
           // creates the file
           file.createNewFile();

           // creates a FileWriter Object
           FileWriter out = new FileWriter(file);

           // Writes the content to the file
           out.write(pos_Let);
           out.flush();
           out.write(pos_Num);
           out.flush();
           out.close();
       }
  }  

2 个答案:

答案 0 :(得分:1)

引用方法createNewFile()

  

当且仅当具有此名称的文件尚不存在时,才会以原子方式创建一个由此抽象路径名命名的新空文件。检查文件是否存在以及文件是否存在(如果不存在)是针对可能影响文件的所有其他文件系统活动的原子操作。

     

注意:此方法不应用于文件锁定,因为无法使生成的协议可靠地工作。应该使用FileLock工具。

     

返回:       如果指定的文件存在并且已成功创建,则为true;如果指定的文件已存在,则为false

在您的情况下,首先创建文件,createNewFile()返回true,因此您转到if块,将该行附加到当前文件。然后,createNewFile()返回false,因为文件存在!所以,你转到else块,然后从头开始再次创建文件......

所以,基本上,只需将ifelse相反,并且不要再调用createNewFile()两次......尽可能少的更改(这样你就不会得到困惑)这是我的简单建议:

protected  void writeCoordtoFile () throws IOException
{
   File file = new File("FermiPresentCoord.txt");
   boolean fileDoesNotExist = file.createNewFile() ;
   //boolean fileDoesNotExist = file does **not** exist!
   if (fileDoesNotExist)
   {
       // create a FileWriter Object
       FileWriter writer = new FileWriter(file);

       // Writes the content to the file
       writer.write(pos_Let);
       writer.write(pos_Num);
       writer.close();

   }
   else
   {
       // creates a FileWriter Object
       FileWriter out = new FileWriter(file,true);

       // Writes the content to the file
       out.write(""); //not sure why you need that...
       out.write(pos_Let);
       out.write(pos_Num);
       out.close();
   }
}  

答案 1 :(得分:1)

我无法找出您检查输出文件是否存在的原因。因为,当您使用FileWriter时,如果路径中指定的文件不存在,它将创建它并打开一个字符输出流。此外,如果它存在于该路径中,则只打开输出流并准备写入。

尝试以下代码,看看运行多次时发生的事情:

float posLat = 156.23589965f; 
float posLon = 12.987564f; 
File file = new File("c:/FermiPresentCoord.txt");
FileWriter writer = new FileWriter(file, true);
writer.append(posLat+",");
writer.append(posLon+",");
writer.flush();
writer.close();

当您要写入文件时,无需调用file.createNewFile()和/或检查文件是否存在。

FileWriter构造函数的第二个参数是append标志。因此,每次使用FileWriter(file, true)构造函数为文件创建输出流时,它都会自动附加到文件的数据中。

祝你好运。