0

sample.txt次の行を含むテキストファイルがあります

sample1.txt
test.ppt
example.doc
content.pdf

field(example phpcookbook.pdf, )という動的変数がありsample1.txt、ファイル内の各行と比較する必要がsample.txtあり、テキスト ファイルに が含まれていない場合は、fieldに追加する必要がありますsample.txt。次のコードを試しましたが、機能しません。

File insert=new File(sample.txt);
BufferedReader br = new BufferedReader(new FileReader(insert));
String strLine;

while ((strLine = br.readLine()) != null) {
    if(!strLine.equals(field)) {
        FileWriter fw = new FileWriter(insert, true);
        BufferedWriter bw = new BufferedWriter(fw);
        bw.append(field);
        bw.close();
    }
}

次の出力が得られるはずです

sample1.txt
test.ppt
example.doc
content.pdf
phpcookbook.pdf

テキストファイルを行ごとに動的変数と比較する方法は?

4

4 に答える 4

3

質問を正しく理解している場合、これが必要なものです。

File insert = new File("sample.txt");
BufferedReader br = new BufferedReader(new FileReader(insert));
String strLine;
Boolean hasLine = false;

while ((strLine = br.readLine()) != null) {
    if(strLine.equals(field)) {
        hasLine = true;
        break;
    }
}

br.close();

if (!hasLine) {
    FileWriter fw = new FileWriter(insert, true);
    BufferedWriter bw = new BufferedWriter(fw);
    bw.append(field + "\n"); // assumes field does not already have a newline
    bw.flush();
    bw.close();
}

に注意してbreak;ください。これにより、探しているものに対する答えが既に得られているため、while ループが中断されます。

Your original code was doing:
for every line:
  Do I equal field?
    Yes: goto next line
    No: append field to file and goto next line

fieldしかし、あなたが知りたかったのは、各行ではなく、ファイルに表示されるかどうかでした。

于 2013-06-19T14:25:10.567 に答える
1

次のようにする必要があります。

    File insert = new File("sample.txt");
    boolean isStringPresent = false;
    BufferedReader br = new BufferedReader(new FileReader(insert));
    String strLine;
    while ((strLine = br.readLine()) != null) {
        if (strLine.equals(field)) {
            isStringPresent = true;
        } 

    }
    if(!isStringPresent) {
        FileWriter fw = new FileWriter(insert, true);
        BufferedWriter bw = new BufferedWriter(fw);
        bw.append(field);
        bw.close();
    }
于 2013-06-19T14:25:36.720 に答える
1

Commons IO を使用する必要があります。

この作業例を参照してください

package training;

import java.io.File;
import java.io.IOException;
import java.util.List;

import org.apache.commons.io.FileUtils;

public class TestFile {

    /**
     * @param args
     * @throws IOException
     */
    private static String field = "phpcookbook.pdf";
    private static String fileContent;

    public static void main(String[] args) throws IOException {
        boolean found = false;
        File file = new File("test.txt");
        List<String> lines = FileUtils.readLines(file);
        for (String line : lines) {
            if (line.equals(field)) {
                found = true;
                break;

            }
        }
        if (!found) {
            fileContent = FileUtils.readFileToString(file);
            fileContent += "\n" + field;
        }
        FileUtils.write(file, fileContent);
    }
}
于 2013-06-19T14:29:07.433 に答える