2016-06-24 10 views
0

私はテキストファイルにあるものを読み込み、textField2天気でそれが変更されているかどうかを表示したいと思う次のコードを持っています...もしあれば、それを続行する必要があります。それがない場合は、ファイルが空に変更されるまで再度チェックする必要があります。誰も助けることができますか?ここに私のコードは次のとおりです。テキストファイル内のテキストが空に変更されているかどうかを継続的に確認するにはどうすればよいですか? Java

package application; 
 

 
import javafx.event.ActionEvent; 
 
import javafx.scene.control.TextField; 
 
import javafx.application.Application; 
 
import javafx.stage.Stage; 
 
import javafx.scene.Scene; 
 
import javafx.scene.Parent; 
 
import javafx.fxml.FXMLLoader; 
 
import javafx.fxml.FXML; 
 
import java.io.BufferedWriter; 
 
import java.io.FileWriter; 
 
import java.io.BufferedReader; 
 
import java.io.FileReader; 
 
import java.io.IOException; 
 

 

 
public class Main extends Application { 
 
\t @Override 
 
\t public void start(Stage primaryStage) { 
 
\t \t try { 
 
\t \t \t // BorderPane root = new BorderPane(); 
 
\t \t \t Parent root = FXMLLoader.load(getClass(). 
 
\t \t \t \t \t getResource("Root.fxml")); 
 
\t \t \t 
 
\t \t \t Scene scene = new Scene(root,550,400); 
 
\t \t \t scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm()); 
 
\t \t \t primaryStage.setScene(scene); 
 
\t \t \t primaryStage.show(); 
 
\t \t } catch(Exception e) { 
 
\t \t \t e.printStackTrace(); 
 
\t \t } 
 
\t } 
 
\t 
 
\t public static void main(String[] args) { 
 
\t \t launch(args); 
 
\t } 
 
\t 
 
\t @FXML 
 
\t private TextField textField; 
 
\t 
 
\t @FXML 
 
\t private TextField textField2; 
 
\t 
 
\t @FXML 
 
\t protected void onClick(ActionEvent event) throws IOException { 
 
     BufferedWriter writer = null; 
 
     try { 
 
      //create a temporary file 
 

 

 
      // This will output the full path where the file will be written to... 
 

 

 
      writer = new BufferedWriter(new FileWriter("C:/Users/Custom/Documents/Sample.txt")); 
 
      writer.write(textField.getText()); 
 
     } catch (Exception e) { 
 
      e.printStackTrace(); 
 
     } finally { 
 
      try { 
 
       // Close the writer regardless of what happens... 
 
       writer.close(); 
 
      } catch (Exception e) { 
 
      } 
 
      while (readFile("C:/Users/Custom/Documents/Sample.txt") != ""){ 
 
      \t textField2.setText("Waiting..."); 
 
      } 
 
      textField2.setText("Done!"); 
 
      
 

 
\t } 
 
} 
 

 
\t String readFile(String fileName) throws IOException { 
 
\t  BufferedReader br = new BufferedReader(new FileReader(fileName)); 
 
\t  try { 
 
\t   StringBuilder sb = new StringBuilder(); 
 
\t   String line = br.readLine(); 
 

 
\t   while (line != null) { 
 
\t    sb.append(line); 
 
\t    sb.append("\n"); 
 
\t    line = br.readLine(); 
 
\t   } 
 
\t   return sb.toString(); 
 
\t  } finally { 
 
\t   br.close(); 
 
\t  } 
 
\t } 
 
}

+0

変更したかどうかは、ファイルのタイムスタンプで確認できます。いつ空の文字列を返すのですか? – Boola

+0

の条件を指定すると、ループは可能な限り高速で実行されます。これは良くないので必要ありません。代わりにこのロジックを別のスレッドに書き込んで、ファイルの内容チェックのたびに1秒後にスレッドをスリープさせることができます。また、内容を確認する代わりにファイルサイズのバリエーションをチェックすることもできます。 –

+0

申し訳ありませんが、私はJavaに慣れていないので、redflar3はわかりません。もう少し詳しく教えてもらえますか?私は興味をそそられる。 –

答えて

0

あなたはそれが変化したか否かを判断するために、ファイルのタイムスタンプを確認することができます。

サンプルコード:

Long fileLastModified; 
    File file = new File("file"); 
    if (!file.exists()) { 
     syserr 
    } 
    if (file.lastModified() <= this.fileLastModified) { 
     return oldValue; 
    } 
    this.fileLastModified = file.lastModified(); 

redflar3

0

によってコメントとしても、あなたがスレッドを使用する必要がありますこんにちはあなたはタイマーがファイルをチェックすることができます2秒に1回程度のスニペットは、ここで

を行きます
new java.util.Timer().schedule( 
    new java.util.TimerTask() { 
     @Override 
     public void run() { 
      //Read your file 
      if(fileEmpty){ 
       //Update your textfiled 
       cancel(); //Stops this timer 
      } 
     } 
    }, 
    0,2000); 

タスクが完了したら、単にpurge()を使用してください。

希望します。

関連する問題