我正在尝试将一些坐标写入文件,然后将其作为字符串读取。所以我需要将它们写入附加文件...没有空格或新行,但我的代码只写第一个坐标,即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();
}
}
答案 0 :(得分:1)
引用方法createNewFile():
当且仅当具有此名称的文件尚不存在时,才会以原子方式创建一个由此抽象路径名命名的新空文件。检查文件是否存在以及文件是否存在(如果不存在)是针对可能影响文件的所有其他文件系统活动的原子操作。
注意:此方法不应用于文件锁定,因为无法使生成的协议可靠地工作。应该使用FileLock工具。
返回: 如果指定的文件不存在并且已成功创建,则为true;如果指定的文件已存在,则为false
在您的情况下,首先创建文件,createNewFile()
返回true,因此您转到if
块,将该行附加到当前文件。然后,createNewFile()
返回false,因为文件存在!所以,你转到else
块,然后从头开始再次创建文件......
所以,基本上,只需将if
与else
相反,并且不要再调用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)
构造函数为文件创建输出流时,它都会自动附加到文件的数据中。
祝你好运。