1

これはおそらく非常に基本的な質問ですが、さまざまなオプションを試しましたが、うまくいかなかったため、助けを求めました。指定したディレクトリ内にファイルを作成したい。ファイルがすでに存在する場合は、データを追加したいと思います。以下は私が試したものです:

    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"

ただし、それでもディレクトリ内にファイルは作成されません。私が欠けているものを教えていただけますか?

OS:Ubuntu 12.04

4

1 に答える 1

3

FileObj.getNameではなく、FileObj.getAbsolutePathを使用する必要があります。getNameはファイルの名前を返すだけです。これは、ファイルが常に現在のディレクトリに配置されていた理由を説明しています。

空のファイルの問題は、関数の最後でwriter.close()を呼び出すことで解決できます。createNewFileを使用する必要はないと思います

于 2012-12-11T05:44:16.560 に答える