这可能是一个非常基本的问题,但我尝试了各种选项,但没有成功,因此请求帮助。我想在指定的目录中创建一个文件。如果该文件已存在,我想向其追加数据。以下是我的尝试:
var DirectoryName: String = "LogFiles"
var dir: File = new File(DirectoryName);
dir.mkdir();
var ActorID: String = "1"
var FileName: String = DirectoryName + File.separator + "Actor_" + ActorID + ".log"
val FileObj: File = new File(FileName)
// FileObj.getParentFile().mkdirs();
// FileObj.createNewFile();
var FileWriterObj: FileWriter = null
var FileExistsFlag = 0
if (!FileObj.exists())
{
FileWriterObj = new FileWriter(FileObj.getName())
}
else
{
FileWriterObj = new FileWriter(FileObj.getName(), true)
FileExistsFlag = 1
}
var writer = new PrintWriter(FileWriterObj)
if(FileExistsFlag == 0)
writer.write("new file")
else
writer.append("appending to old file")
互联网搜索要求使用以下内容:
FileObj.getParentFile().mkdirs();
FileObj.createNewFile();
但是它会在目录中创建空文件,并在目录外创建新文件并附加到它。还有一些帖子表明不需要使用createNewFile()来创建文件。
我尝试过各种路径格式,如下所示:
var DirectoryName: String = "../LogFiles"
var DirectoryName: String = "/home/ms/Desktop/Project/LogFiles"
但它仍然不会在目录中创建文件。 你能指点一下我错过的东西吗?
操作系统:Ubuntu 12.04
答案 0 :(得分:3)
您应该使用FileObj.getAbsolutePath,而不是FileObj.getName。 getName只返回文件的名称,这解释了为什么它总是放在当前目录中。
可以通过在函数末尾调用writer.close()来解决空文件问题。我不认为有必要使用createNewFile