2017-11-20 7 views
0

ファイルを別のファイルに置き換えるときに奇妙な問題があります。 このコードだけでなく、初めて作品:既存のファイルを交換してください、長さの問題

test 

その後、私は長い文字列で、「テスト」という文字列を置き換え、もう一度コードを実行します:

String fileContent = "test";  

File file = new File(Environment.getExternalStorageDirectory() + "/myApp/text.txt"); 
    file.getParentFile().mkdirs(); 
    if (file.exists()) 
     file.delete(); 

    try { 
     FileOutputStream fileOutputStream = new FileOutputStream(filePath); 
     BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream); 

     bufferedOutputStream.write(fileContent.getBytes()); 

     bufferedOutputStream.close(); 
     fileOutputStream.close(); 

    } catch (Exception exception) { 
     exception.printStackTrace(); 
    } 

をそれはこのコンテンツのファイルを作成します

String fileContent = "admiral"; 

それは古いファイルを削除し、新しいものを作成し、それだけで4つの最初の文字の書き込み:

を私は短い文字列でコンテンツを交換する場合
admi 

最後に、(「こと」、それが破損したファイルを作成:

be\00\00 

をしかし、私は手動でファイルを削除した場合、それは...非常に奇妙な動作します。 ..

解決済み:問題は、geditのキャッシュでした! :s、あなたの助けをすべての方法thxによって! :)

+0

'write'の後に' bufferedOutputStream.flush() 'を追加しようとしましたか? –

答えて

0

これを使用してコンテンツを上書きするようにしてください:

FileOutputStream fileOutputStream = new FileOutputStream(filePath, false); 
+2

デフォルトでは 'false'として動作しますが、これは必要ありません –

0

あなたがBufferedOutputStreamを使用する必要がなぜ私は理解していない... ただ、この方法でFileOutputStreamを使用して書いてみる:

String fileContent = "test";  
File file = new File(Environment.getExternalStorageDirectory() + "/myApp/text.txt"); 
    file.getParentFile().mkdirs(); 
    if (file.exists()) 
     file.delete(); 

    try { 
     FileOutputStream fileOutputStream = new FileOutputStream(filePath); 

     fileOutputStream.write(fileContent.getBytes()); 

     fileOutputStream.close(); 

    } catch (Exception exception) { 
     exception.printStackTrace(); 
    } 

参考:this question

0

まずことに注意してくださいは、charsetのオプションのパラメータを指定せずに、現在のプラットフォームのパラメータを使用します。 1をコールする必要があります追加するため

FileOutputStream fileOutputStream = new FileOutputStream(filePath, true); 

あなたのケースでは、あなたの内容を交換したい、とあなたのコンストラクトは、すでにことを行います。 deleteを削除するとシステムの動作が改善されます。

最後の問題は4バイトしか書いていません。

bufferedOutputStream.write(fileContent.getBytes()); 

古いファイルの長さ( "test" = 4バイト)を新しいコンテンツの書き込みに使用したかのようにします。私はそれを説明することはできませんので、おそらくdeleteの削除は、バグが消える原因になる可能性があります。

場合によっては、ファイルが別の場所で開かれている可能性があります。

関連する問題