0

ファイルの内容を String オブジェクトと比較しようとしています。しかし、内容は同じなのに、内容が違うことを伝えて、同じ内容を何度も追加しています。このコードを実行するたびに、同じコンテンツが書き換えられますが、これは私が望んでいるものではありません。同じ内容を書き換えてはいけません。

package fileOperations;

    import java.io.BufferedReader;
    import java.io.DataInputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.InputStreamReader;

public class CompareFiles {

    /**
     * @param args
     * @throws Exception 
     */
    public static void main(String[] args) throws Exception {
        // TODO Auto-generated method stub

        CompareFiles cf = new CompareFiles();

        String file1 =("new apple") ;
            System.out.println(file1);
            System.out.println("length"+file1.length());
        File f = new File("C:\\Documents and Settings\\newfile.txt");
            cf.compareFiles(file1, f);

    }

    private void compareFiles(String new_content,File f) throws IOException{

        StringBuffer old_content=new StringBuffer();
        String str;
        FileInputStream fstream = new FileInputStream(f);
        BufferedReader br = new BufferedReader(new InputStreamReader(fstream));

          while ((str = br.readLine()) != null) {
              System.out.println(str);            
              old_content.append(str);
            }
          fstream.close();
        System.out.println("length "+old_content.length());

        if(!(0==new_content.compareTo(old_content.toString()))){
            createPrivateKey(f, new_content);
        }
    }

    public void createPrivateKey(File privateKeyFile,String keyString ){

        try {
            FileWriter fs = new FileWriter(privateKeyFile);
            fs.write(keyString);
            fs.close();
            System.out.println("Private key file contents added");

        } catch (IOException e) {
            System.out.println("Unable to access  private key file and/or config file");
        }
    }
}
4

2 に答える 2

0

車輪の再発明を試みてApacheCommonsを使用することを避けていたでしょう-2つのFileUtils.contentEquals()ファイルを比較し、それをオブジェクトFileUtils.readFileToString()として取得するためにString

Apache commonsは、非常に寛容なライセンスを持つオープンソースの広く使用されているライブラリであるため、通常はそれを使用することをお勧めします。

PSあなたのバグは、各行の後に行ターミネータを追加していないということかもしれませんが、内容を知らなければ見分けるのは難しいでしょう。

于 2012-09-06T06:04:05.080 に答える
0

内容は同じで、結果は期待どおりです。ブレークラインが処理されませんでした。つまり、"\n" を前後に追加する必要がありました -- old_content.append(str);

于 2012-10-11T09:33:35.337 に答える