0

フォルダーにファイルを作成しているという奇妙な状況で立ち往生していますが、ファイルを作成する前に、フォルダーにファイルがある場合は、現在のファイルのみを削除する必要があることを確認する必要がありますプロセスがそこにあるはずです。

私のアプリケーションでは、そのフォルダーにファイルを作成するジョブが毎日実行されるため、現在ジョブが実行されているときはいつでも、前日のファイルを削除する必要があり、フォルダーにファイルが存在しないはずですが、以下に示すコードはそのフォルダーにファイルを作成しますしかし、問題はその前日のファイル、またはジョブが同じ日に複数回実行された場合、それらのファイルも削除する必要があるフォルダにあります.これを達成する方法を教えてください..

File file = new File(FilePath + s); //path is c:\\abc folder & s is file name fgty.dat file         
if (file.exists()) {
  file.delete(); 
}
file.createNewFile();

お知らせ下さい

4

4 に答える 4

1

あなたの代わりに、ディレクトリを別の名前に移動します。たとえばabc.OLD、ディレクトリを再作成してからファイルを作成します。すべてがうまくいけば、最後に ols ディレクトリを削除できます。

プログラムの異なるインスタンスが同時に実行される可能性がある場合は、何らかの形式の同期を実装する必要があります。かなり単純なアプローチは、abc.OLDディレクトリが存在するかどうかを確認し、存在する場合は実行を中止することです。

于 2013-08-30T15:21:02.000 に答える
1

あなたのコードをもっと見ることなく、新しいファイルを開く前にフォルダを空にする必要があるように思えます. listファイル オブジェクトのメソッドを使用します。

File newFile = new File(FilePath + s);
for (File f : new File(FilePath).listFiles()) { // For each file in the directory, delete it.
    f.delete();
}
newFile.createNewFile();

フォルダーに他の空でないディレクトリが含まれている場合、これは機能しないことに注意してください。より堅牢なソリューションが必要になります。ただし、上記のコードは、新しいファイルを作成する前に、少なくともフォルダー内のすべてのファイルを削除します (明らかに例外を除きます)。

コメントで述べたように、*.datファイルのみを削除したい場合は、何かを削除する前にチェックインするのと同じくらい簡単です。

for (File f : new File(FilePath).listFiles()) { // For each file in the directory, delete it.
    if (f.getName().endsWith(".dat")) { // Only delete .dat files
        f.delete();
    }
}
于 2013-08-30T14:56:40.310 に答える
0

まず、オブジェクトをインスタンス化する方法に問題がある可能性があると思います。Fileこれは、パス区切り文字 ( ) がない場合、の代わりに\作成しようとするためです。c:\abcfgty.datc:\abc\fgty.dat

代わりに使用してください:

File file = new File(filePath, s);

その後、「.dat」で終わるファイルを削除できます。私が理解したように、サブディレクトリを削除する必要はありません。(ここに方法を説明するリンクがあります。こちらも参照してください)

for (File f : filePath.list()) { // For each file in the directory, delete it.
    if(f.isFile() && file.getName().toLowerCase().endsWith(".dat");){
        f.delete();
    }
}
try {
    file.createNewFile();
} catch (IOException ex) {
    //Please do something here, at leat ex.printStackTrace()
}

FileFilterを使用して、削除するファイルを選択できることに注意してください。

編集

他の回答で提案されているように、既存のファイルを直接削除するのではなく、移動または名前変更することをお勧めします。

于 2013-08-30T15:42:21.090 に答える
0
File file = new File(FilePath+"test.txt");
File folder = new File(FilePath);
File[] listOfFiles = folder.listFiles();

for(int i = 0; i < listOfFiles.length; i++) {
    if (listOfFiles[i].isFile()) {
        System.out.println("File " + listOfFiles[i].getName());
        listOfFiles[i].delete();
    }
}
    try {
        file.createNewFile();
    } catch (IOException e) {
        e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
    }
于 2013-08-30T15:31:19.843 に答える