2016-10-19 9 views
0

私のプロジェクトでは、特定のファイルの内容を変更する必要があります。ファイルが存在するかどうかにかかわらず、コードが実行されるたびに新しいものを作成する必要があります。ファイルが存在する場合は、元のファイルのコンテンツを削除し、新しい/新鮮なコンテンツのみをファイルに含める必要があります。ファイルが存在する場合でも、毎回新しいファイルを作成します。

注:ファイル名とファイルの場所は、実行ごとに同じになります。

コード:

Spring.xml:

<bean id=".." class="ImageDataProcess"> 
    <constructor-arg ref="x.y.z.filepath.newImageDataFilepath" /> 
    <other constructor args> 
</bean> 

<bean id="x.y.z.filepath.newImageDataFilepath"> 
    <constructor-arg value="#{tmpDirectoryPath}/image-data.txt" /> 
</bean> 

ImageDataProcess.java:

@RequiredArgsConstructor 
public class ImageDataProcess implements PQR { 
    private final String newImageDataTextFilepath; 
    //other values coming from spring 
     @Override 
     public void execute() { 
      File f = new File(newImageDataTextFilepath); 
      ://logic here 
      : 
     Forloop(){ 
      FileUtils.writeStringToFile(f, imageDataFileLine + NEWLINE, true); 
     } 
    } 
} 

しかし、これは単に古いファイルに新しい内容を追加します。 現在のところ、2つの繰り返しを繰り返し実行すると、ファイルサイズは前と同じ2倍になりますが、同じデータであっても同じにしたいと考えています。 どのように私はこれを達成することができますか?

+0

最初の書き込み動作後trueに設定します。あなたがそこを通過しているか、私が何を引き起こしているかを確認してくださいヒント:これらのパラメータの1つは、プログラムに追加または追加を指示します。別のサイドノードとして:[FileUtils APIに続いて、あなたがやっている呼び出しは無駄です](https://commons.apache.org/proper/commons-io/javadocs/api-2.5/deprecated-list.html) – SomeJavaGuy

+0

それを削除して再作成すれば存在しますか? 何らかの理由で必要な場合に備えて、古いデータを保存することもできます。 – Deckerz

+0

@ケビン:ええ、私はそれが追加のためであることを知っています。しかし、その内部のforループので、私はそこに追加する必要があります。 forloopが始まる前に、同じ名前の新しい空のファイルが必要です。 – user2696258

答えて

0
FileUtils.writeStringToFile(f, imageDataFileLine + NEWLINE, true); 

ここでブール値 "true"を削除する必要があります。これは、上書きするのではなく、ファイルに追加することを指定します。

私はapiの具体的な方法にリンクしました。

更新:ファイルを書き込む前に削除することもできます。追加する必要がある場合。

FileUtils.forceDelete(file); 
+0

ええ、私はそれが追加のためだと知っている。しかし、その内部のforループので、私はそこに追加する必要があります。 forloopが始まる前に、同じ名前の新しい空のファイルが必要です。 – user2696258

+0

これで可能な解決策は何でしょうか? – user2696258

+0

ファイルを書き込む前に削除することができます。そして、あなたがループ内で書いているのであれば、最初の繰り返しであなたのために新しいファイルを作成します。私はこれを反映する答えを更新しました。 – Brion

0

このメソッドに渡す変数はどうでしょうか。ただ、falseでそれを初期化し、APIへの迅速な外観は役立つかもしれない

boolean append = false; 
File f = new File(path); 
... 
for(...){ 
    FileUtils.writeStringToFile(f, imageDataFileLine + NEWLINE, append); 
    if(!append) append = true; 
} 
+0

ねえ..これはうまくいくかもしれない。私は、元々10行のファイルを持っていて、ファイルに書き込まれる新しい内容がちょうど6行であるという点では懐疑的です。最終ファイルには最後の4行がありますか? [参考:私はこれらの4つのラインを望んでいません]。 – user2696258

+0

ねえ、私はそれをやる方法を見つけました。 Printwriterクラスを使用します。しかし、テストケースは合格していません。あなたが助けるならば、助けてください。私はここに質問を掲示した:http://stackoverflow.com/questions/40173392/wanted-but-not-invoke-mockito-print-writer – user2696258

関連する問題