0
    import java.io.*;

public class FileChecker {

   private static final String FILE_DIR = "F:/study/";
   private static final String FILE_TEXT_EXT1 = ".pdb";
   private static final String FILE_TEXT_EXT2 = ".ali";
   private static final String FILE_TEXT_EXT3 = ".txt";
   private static final String FILE_TEXT_EXT4 = ".py";
   private static final String FILE_TEXT_PREFIX1 = "target.";
   private static final String FILE_TEXT_PREFIX2 = "blastOutput.";
   //private static final String FILE_TEXT_PREFIX3 = "1OPL.";

  //public static void main(String args[]) 
   public FileChecker()
   {
/*new FileChecker().deleteFile(FILE_DIR,FILE_TEXT_EXT1);
        new FileChecker().deleteFile(FILE_DIR,FILE_TEXT_EXT2);
        new FileChecker().deleteFile(FILE_DIR,FILE_TEXT_EXT3);
       new FileChecker().deleteFile(FILE_DIR,FILE_TEXT_EXT4);
      new FileChecker().deleteFile2(FILE_DIR,FILE_TEXT_PREFIX1);
        new FileChecker().deleteFile2(FILE_DIR,FILE_TEXT_PREFIX2);
        new FileChecker().deleteFile2(FILE_DIR,FILE_TEXT_PREFIX3);*/
   }

   public void deleteFile(String folder, String ext){

     GenericExtFilter filter = new GenericExtFilter(ext);
     File dir = new File(folder);

     //list out all the file name with .txt extension
     String[] list = dir.list(filter);

     if (list.length == 0) return;

     File fileDelete;

     for (String file : list){
    String temp = new StringBuffer(FILE_DIR).append(File.separator).append(file).toString();
        fileDelete = new File(temp);
        boolean isdeleted = fileDelete.delete();
        System.out.println("file : " + temp + " is deleted : " + isdeleted);
     }
   }
 public class GenericExtFilter implements FilenameFilter {

       private String ext;

       public GenericExtFilter(String ext) {
         this.ext = ext;             
       }

       public boolean accept(File dir, String name) {
         return (name.endsWith(ext));
       }
    }

 public void deleteFile2(String folder, String prefix){

     GenericExt filter = new GenericExt(prefix);
     File dir = new File(folder);

     //list out all the file name with .txt extension
     String[] list = dir.list(filter);

     if (list.length == 0) return;

     File fileDelete;

     for (String file : list){
    String temp = new StringBuffer(FILE_DIR).append(File.separator).append(file).toString();
        fileDelete = new File(temp);
        boolean isdeleted = fileDelete.delete();
        System.out.println("file : " + temp + " is deleted : " + isdeleted);
     }
   }
 public class GenericExt implements FilenameFilter {

       private String prefix;

       public GenericExt(String prefix) {
         this.prefix = prefix;             
       }

       public boolean accept(File dir, String name) {
         return (name.startsWith(prefix));
       }
    }  

 public void deleteFile3(String ID, String Chain)
 {
     File file = new File(ID+".pdb");
     if(file.delete())
     {
     System.out.println(ID+"deleted");
     }
     File file2 = new File(Chain+".pdb");
     if(file2.delete())
     {
      System.out.println(Chain+"deleted");
     }

 }


}

このコードは別のクラスから呼び出されます。私のコードのいくつかがそうであるべきであるように継続して実行されるとき..私が特定のファイル拡張子の私のファイルを削除しようとすると、それは特に2つのpdbファイルを削除しません。次に、file.close()を使用してそれらを閉じてから、ファイル名と拡張子全体がわかっているときに再度削除してみましたが、無駄になりました。

    String FILE_DIR = "F:/study";
    String FILE_TEXT_EXT1 = ".pdb";
  String FILE_TEXT_EXT2 = ".ali";
  String FILE_TEXT_EXT3 = ".txt";
  String FILE_TEXT_EXT4 = ".py";
    String FILE_TEXT_PREFIX1 = "target.";
  String FILE_TEXT_PREFIX2 = "blastOutput.";
 //  String FILE_TEXT_PREFIX3 = "1OPL.";


new FileChecker().deleteFile(FILE_DIR,FILE_TEXT_EXT1);
        new FileChecker().deleteFile(FILE_DIR,FILE_TEXT_EXT2);
        new FileChecker().deleteFile(FILE_DIR,FILE_TEXT_EXT3);
       new FileChecker().deleteFile(FILE_DIR,FILE_TEXT_EXT4);
      new FileChecker().deleteFile2(FILE_DIR,FILE_TEXT_PREFIX1);
        new FileChecker().deleteFile2(FILE_DIR,FILE_TEXT_PREFIX2);
   // new FileChecker().deleteFile2(FILE_DIR,FILE_TEXT_PREFIX3);
        BufferedWriter bw = new BufferedWriter(new FileWriter(FILE_DIR+TemplatePDBID+".pdb", true));
    bw.close();
    BufferedWriter bw1 = new BufferedWriter(new FileWriter(FILE_DIR+Template+".pdb", true));
    bw1.close();
    new FileChecker().deleteFile3((FILE_DIR+TemplatePDBID), (FILE_DIR+Template));

これは、最後にFileCheckerクラスを呼び出す他のクラスのスニペットです。

受け取ったアウトを貼り付けています

file : F:/study\1OPL.pdb is deleted : false
file : F:/study\1OPL_A.pdb is deleted : false
file : F:/study\model.pdb is deleted : true
file : F:/study\alignment.ali is deleted : true
file : F:/study\tempAli.ali is deleted : true
file : F:/study\1OPL.fasta.txt is deleted : true
file : F:/study\ModelDescription.txt is deleted : true
file : F:/study\ModellerOutput.txt is deleted : true
file : F:/study\script.py is deleted : true
file : F:/study\target.D00000001 is deleted : true
file : F:/study\target.ini is deleted : true
file : F:/study\target.rsr is deleted : true
file : F:/study\target.sch is deleted : true
file : F:/study\target.V99990001 is deleted : true
file : F:/study\blastOutput.xml is deleted : true

この異常について助けてください。すべてのインスタンスで最初の2つのファイルをスキップしている理由を正確に理解できません。

4

2 に答える 2

0

作成したコードと他のファイルが正常に削除されているという事実を考えると、最初の2つのファイルには、削除を妨げる権限またはロックの問題があると結論付けることしかできません。コマンドラインからそれらを削除しようとしましたか?

于 2013-03-16T19:05:37.053 に答える
0

他のクラスは、ファイルを期待する場所に書き込みませんF:/study(または、少なくとも編集前に示したコードは書き込みませんでした)。したがって、ファイルはありません。

さらに、コンストラクターを使用したい場合があります

File(File, String)

ディレクトリリストを通過するとき、つまり書き込み

 fileDelete = new File(dir, file)

StringBuffer で名前を作成する代わりに。

于 2013-03-16T18:38:48.060 に答える