2017-01-31 4 views
2

次のコードで何がうまくいかず、誰かが私を助けてくれるのだろうかと思っていました。 I`mがやろうとしてどのようなことです:Java:ファイルに応じたスレッド

  • は、それぞれのタスクを予備成形そのフォルダ
  • に含まれる各.TXTファイルのためのスレッドを作成し、それ
  • にいくつか.TXT、ファイルとフォルダの作成しますスレッド(この場合は数秒待つだけです)
  • その後、タスクが実行された後、個々のスレッドが依存するファイルを削除します。

私の問題は、コードを実行するたびに、すべてのことがうまく動作し、タスクを実行した後にすべてのファイルを削除することです。その結果、1つの.txtファイルのみが削除され、残りのファイルはそのフォルダに残ります。 :/

私は間違っていますか?

助けが本当に素晴らしいです。前もって感謝します。

ジュリアン:D

public abstract class Threads { 
static Formatter x; 
public static void main(String[] args) throws IOException { 


    //create folder with 10 .txt-files 
    File theFolder = new File("C:\\Users\\Gamer\\Desktop\\TheFolder\\"); 
    theFolder.mkdir(); 

    for(int files = 0; files <= 10; files++) { 
     x = new Formatter("C:\\Users\\Gamer\\Desktop\\TheFolder\\"+files+".txt"); 
    } 

    System.out.println("Created the folder and files"); 
    //Close the formatter 
    x.close(); 


    //Start a thread for each file in that folder 
    System.out.println(Files.list(Paths.get("C:\\Users\\Gamer\\Desktop\\TheFolder\\")).count()); 
    Thread[] threads = new Thread[(int) Files.list(Paths.get("C:\\Users\\Gamer\\Desktop\\TheFolder\\")).count()]; 

    for(int i = 0; i < threads.length; i++) { 
     int del = i; 
     threads[i] = new Thread(new Runnable() { 
      public void run() { 
       try { 
        Thread.sleep(2000); 

        //after timeout of ones thread, terminate file 
        File theFile = new File("C:\\Users\\Gamer\\Desktop\\TheFolder\\"+del+".txt"); 
        theFile.delete(); 
        System.out.println("deleted file: "+del); 
       } catch (InterruptedException e) {e.printStackTrace();} 
      } 
     }); 
     threads[i].start(); System.out.println("Started thread no. "+i);}  

    System.out.println("end"); 
    } 
} 
+0

"C:\\ユーザー\\ゲーマー\\デスクトップ\\ TheFolder \\ 0.txt" と呼ばれています。これを試してみてください... [など]?あなたはファイルの名前を動的に読むことができます。 –

+0

エラーが生じますか?あなたはそれを踏み出そうとしましたか? –

+0

スレッドがデーモンかどうかチェックしましたか? –

答えて

6

は、あなただけの1つのフォーマッタ(最後の)近くに、したがって、他のすべてのファイルがまだ開いているハンドルを持っており、削除することはできません。私は、ファイルを想定し

for(int files = 0; files <= 10; files++) { 
    x = new Formatter("C:\\Users\\Gamer\\Desktop\\TheFolder\\"+files+".txt"); 
    x.close(); 
} 
//x.close(); <-- this will only close the last formatter that is assigned to "x" after the loop is done 
+0

この場合、彼は最後に作成されたファイルだけを削除することができますか?ではない ? – Darshit

+1

うわー、ありがとう。私はその解決策が簡単であるとは思っていませんでした。 – Julien

+0

はい、他のすべてのファイルハンドルが開いているので、最後のファイルのみを削除できます。 __ boolean successful = theFile.delete(); __を調べるときは、最後のファイルを除く他のすべてのファイルについては__false__なので、実際に気づいたでしょう。 –

関連する問題