【问题标题】:Java get line total then write to specific lineJava获取总行然后写入特定行
【发布时间】:2014-11-24 14:43:28
【问题描述】:

我一直坚持使用 File、BufferedReader 和 BufferedWriter 写入特定行。

我想要实现的是让我的文本文件总行数 (-3) 并写入该行。

目前它只是擦除整个文件,没有写入任何内容。

我在做什么的图片:

(在图片中)第 25 行为空白,第 26 行不包含文档。它包含“}”

&我的代码:

    package com.tests.writer;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import javax.swing.JFrame;

public class NewWriter {

    static Integer tableCount;

    static File file;
    static FileWriter fw;
    static FileReader fr;
    static BufferedWriter bw;
    static BufferedReader br;

    public static void main(String[] args) {
        JFrame frame = new JFrame("Test {New Writer}");
        frame.setBounds(500, 500, 500, 500);
        frame.setVisible(true);
        frame.setResizable(false);
        frame.setAutoRequestFocus(true);
        try {
            startApplication();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static void startApplication () throws IOException {
        writeToFile ();
    }

    private static void writeToFile () throws IOException {
        Integer lineTCount = 0;
        file = new File("Tables.txt");
        if (file.exists()) {
            fw = new FileWriter(file.getAbsolutePath(), true);
            fr = new FileReader(file.getAbsolutePath());
            bw = new BufferedWriter(fw);
            br = new BufferedReader(fr);

            for (String line = br.readLine(); line != null; line = br.readLine()) {
                lineTCount++;
                System.out.println(lineTCount);
              }
            System.out.println(lineTCount);
            bw.write("Test Text to insert");
            System.out.println("done");
            System.exit(0);
        } else {
            file.createNewFile();
            System.out.println("New File = " + file.toString());
            writeToFile();
        }
    }

}

如果有更简单的方法,我对所有想法持开放态度,因为我仍然不熟悉 Java.io

&如果有人能告诉我这是正确的。我可能必须将整个文件添加到列表中,添加新文本然后重新编写文件。

【问题讨论】:

  • 为什么你同时使用时间 br 以及你为写线所用的 bw 呢。

标签: java bufferedreader bufferedwriter


【解决方案1】:

有些事情你做的有点不对劲。 首先也是最重要的;您的文件返回空的原因是因为您没有调用

bw.close();

完成文件写入后。

我不知道有什么方法可以写入文件的特定部分。我不认为有一个。

您需要做的是重新编写文件。基本上,制作一个临时副本,然后像以前一样写下所有行,除了倒数第三行。

看到这个问题: I want to open a text file and edit a specific line in java

(我不知道如何将问题标记为重复)


BufferedWriter 的 'write(String s, int off, int len)' 方法实际上声明了

Writes a portion of a String.

注意;这不是“写入文件中的特定位置”。


编辑

我不会使用System.exit(0);。这告诉您的操作系统“此执行失败”。您应该通过排除此行来让您的程序正常关闭。 见:When to use system.exit(0)?

【讨论】:

    【解决方案2】:

    当您循环浏览文件时,bw 指针不会移动。使用它来写入文件中的特定位置。还有为什么会有两个变量 lineCount & lineTCount

    public void write(String s,
             int off,
             int len)
               throws IOException
    

    参考:http://docs.oracle.com/javase/7/docs/api/java/io/BufferedWriter.html#write(java.lang.String,%20int,%20int)

    编辑:你是对的,我的错。您必须阅读以前的内容 -> 进行所需的更改并再次重写整个文件。

    【讨论】:

    • write(str, int, int) 用于打印字符串的一部分。在这种情况下,我正在尝试将字符串打印到特定行(lineTCount - 3),文件中的 atm 是第 25 行。我已经更新了代码并删除了其他不需要的整数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-23
    • 2010-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多