Arraylist在文本文件中追加不覆盖

时间:2015-03-08 15:25:47

标签: java arraylist nio

我正在从事图书馆计划。

删除方法工作正常。

第一次我将文字存储在Arraylist上并在从Arralist中删除Desire Book之后。 再次使用方法writer.write();

在文本文件上编写arraylist(Book)

text之前还要删除那里和新文本。看起来像:

删除前:

第一册

第二册

删除Book2后:

第一册

第二册

第一册

public static void main(String[] args) throws IOException{
            Admin admin=new Admin();
            Charset charset=Charset.forName("US-ASCII");

            Path Source=admin.createTextFile();
            admin.removeBook(Source,charset);

        }

        private void removeBook(Path source, Charset charset) {
            Scanner input=new Scanner(System.in);
            System.out.println("Enter Book Name For Remove");
            String bookName=input.nextLine();

            try(
                    BufferedReader reader=Files.newBufferedReader(source,charset);
                    BufferedWriter writer=Files.newBufferedWriter(source, charset,StandardOpenOption.APPEND);
                    ) 
            {
                ArrayList<String> lines=new ArrayList<>();
                String s;
                while((s=reader.readLine())!=null){
                    lines.add(s);           
                }
                for(int i=0;i<lines.size();i++){
                if( lines.get(i).contains(bookName)){
                    lines.remove(i);

                }
                }

                //Write after removing
                for(int i=0;i<lines.size();i++){
                    writer.write(lines.get(i));
                    writer.newLine();

                }
                writer.close();

            } catch (Exception e) {
                System.out.println(e.getMessage());
            }

        }

1 个答案:

答案 0 :(得分:1)

@RealSkeptic已经提到了它,但是从一开始就存在错误。

除非您确定自己在做什么,否则不要打开同一时间阅读和写作的相同文件。而这个“除非”是罕见的,更不用说在这种情况下你可能会使用FileChannel代替。

创建一个临时文件,其中包含修改内容,将修改后的内容写入其中,然后重命名为原始文件。

例如:

final Path src = ...;
final Path dst = ...;

try (
    final BufferedReader reader = Files.newBufferedReader(src, StandardCharsets.UTF_8);
    final BufferedWriter writer = Files.newBufferedWriter(dst, StandardCharsets.UTF_8);
) {
    String line;
    while ((line = reader.readLine()) != null)
        if (!line.equals(bookToRemove)) {
            writer.write(line);
            writer.newLine();
        }
}

Files.move(dst, src, StandardCopyOption.REPLACE_EXISTING);