1

書き込み用のファイルを作成し、指定された名前のファイルが既に存在する場合は例外を取得したいと考えています。スレッドセーフな実装を探していますが、できれば Java 標準ライブラリに含まれていることを願っています。私が見つけた最も近い呼び出しはこれです:

FileOutputStream fos = new FileOutputStream("/some/file/path.txt");

ただし、これにより、同じ名前の既存のファイルが切り捨てられます。同じ名前のファイルが既に存在する場合、例外をスローするか、エラーを返すメソッドはありますか?

4

5 に答える 5

8

File クラスとcreateNewFileを使用してみてください。

次の解決策はスレッドセーフです。

File file = new File("/some/file/path.txt");
if (file.createNewFile()) {
  // Succesfully created a new file
  FileOutputStream fos = new FileOutputStream(file);
  try {
    // Do something with outputstream
  } finally {
    try { fos.close(); } catch (IOException exception) { }
  }
}
于 2012-09-19T20:15:19.800 に答える
3

これはあなたが望むメソッドです: File.createNewFile

この名前のファイルがまだ存在しない場合にのみ、この抽象パス名で指定された新しい空のファイルを原子的に作成します。ファイルが存在するかどうかのチェックと、存在しない場合のファイルの作成は、ファイルに影響を与える可能性のある他のすべてのファイルシステム アクティビティに関してアトミックな単一の操作です。

于 2012-09-19T20:15:04.297 に答える
1

あなたはできる

  • ファイルが存在することを確認してください
  • 一時的に書き込まない場合
  • 一時ファイルの名前を元の名前に変更します
  • 名前の変更に失敗した場合は、一時ファイルを削除します。

3番目のステップはOSでアトミックであるため、そのスレッドとプロセスは安全です。

于 2012-09-19T20:12:19.927 に答える
0

はい、別の方法があり、コードと簡単に統合できます。

synchronized(this) {
  File f = new File("path");

  if (f.exists())
    throw new FileExistsException();
  else {
    FileOutputStream fos = new FileOutputStream(f);
    ...
  }
}
于 2012-09-19T20:12:12.423 に答える
0
File f = new File("/some/file/path.txt");
if(f.exists()) 
  {
   //delete the file
  }
   else
  {
    //create and do what you want
  }
于 2012-09-19T20:11:37.577 に答える