0

一部のファイルを保存できるアプリがあります。ユーザーがアプリを閉じたときに、ユーザーがまだファイルを保存していない場合は、現在の状態で保存するように依頼したいと思います。
よくわからない場合は、ファイルが最後に保存されてから変更されているかどうかを何らかの形で確認したいと思います。ファイルが保存された場合に有効になり、ファイルが何らかの方法で変更されるたびに戻る変数を
作成することを検討しました(ファイル内の要素の書き込みまたは削除)。 私の質問は、それを行うためのより簡単な解決策があるかどうかです。変数をBooleantruefalse
trueファイルが変更されるたびに(私とマシンの両方で機能します)、これは望ましくありません。これは、非常に幅広く複雑なアプリがあり、ファイルの変更が頻繁に発生する可能性があるためです。

回答後に編集してください。ありがとうございました。本当に役に立ちました。最終的に、ファイルに加えたほとんどの変更に必要な関数が必要であることに気付きました。そのため、あまり作業する必要はありませんでした。他の変更はそれほど多くなかったので、Boolean.
再度、感謝します

4

6 に答える 6

4

変更が頻繁に発生する可能性が低い場合は、ブール変数を設定する変更ごとのオーバーヘッドもごくわずかです。

理想的には、コード内にすべての変更が必要なポイント (たとえば、元に戻す/やり直しを処理する場所) があり、そこにブール変数更新コードを配置できます。

于 2012-11-30T14:03:15.767 に答える
2

別の方法は、ファイルを読み取り、その内容をプログラムの内容と照合することですが、これは不要なオーバーヘッドを生み出すようです。または、何かが保存されたときに時間を保存し、それ以降に変更が加えられたかどうかを確認します。

あなたのブール値のソリューションがはるかに効率的だと思うことを考慮してください。

于 2012-11-30T14:06:13.540 に答える
1

私の提案は、ファイルの状態(保存/変更)を記憶するFileWriterクラスを作成することです。これにより、このライターを使用するだけでよく、ファイルに書き込むたびにブール演算を処理する必要がなくなります。

于 2012-11-30T14:06:00.307 に答える
0

ドキュメントがそれほど大きくない場合は、ユーザーが編集できるものとは別にバックグラウンドでコピーを保持し、アプリを閉じる前に 2 つを比較することができます。

于 2012-11-30T14:04:38.090 に答える
0

ブール変数は最良のアイデアです。

boolean isDataChanged

読みやすく、コードを混乱させません。

于 2012-11-30T14:07:58.170 に答える
0

Google でこのちょっとしたバイナリ比較メソッドを見つけたところですが、うまくいくかどうかは約束できません ;)

/**
* Compare binary files. Both files must be files (not directories) and exist.
* 
* @param first  - first file
* @param second - second file
* @return boolean - true if files are binery equal
* @throws IOException - error in function
*/
public boolean isFileBinaryEqual(
  File first,
  File second
) throws IOException
{
  // TODO: Test: Missing test
  boolean retval = false;

  if ((first.exists()) && (second.exists()) 
     && (first.isFile()) && (second.isFile()))
  {
     if (first.getCanonicalPath().equals(second.getCanonicalPath()))
     {
        retval = true;
     }
     else
     {
        FileInputStream firstInput = null;
        FileInputStream secondInput = null;
        BufferedInputStream bufFirstInput = null;
        BufferedInputStream bufSecondInput = null;

        try
        {            
           firstInput = new FileInputStream(first); 
           secondInput = new FileInputStream(second);
           bufFirstInput = new BufferedInputStream(firstInput, BUFFER_SIZE); 
           bufSecondInput = new BufferedInputStream(secondInput, BUFFER_SIZE);

           int firstByte;
           int secondByte;

           while (true)
           {
              firstByte = bufFirstInput.read();
              secondByte = bufSecondInput.read();
              if (firstByte != secondByte)
              {
                 break;
              }
              if ((firstByte < 0) && (secondByte < 0))
              {
                 retval = true;
                 break;
              }
           }
        }
        finally
        {
           try
           {
              if (bufFirstInput != null)
              {
                 bufFirstInput.close();
              }
           }
           finally
           {
              if (bufSecondInput != null)
              {
                 bufSecondInput.close();
              }
           }
        }
     }
  }

  return retval;
}

ソース: http://www.java2s.com/Code/Java/File-Input-Output/Comparebinaryfiles.htm

ファイルを保存したい場合は、 currentFile の File オブジェクトを作成し、それを既存の File と比較するだけです;)

于 2012-11-30T14:21:46.853 に答える