当前位置: 首页 > 面试题库 >

如何从txt删除行?

孟璞
2023-03-14
问题内容

我的意思是,我想从Android上的文本中删除行。如何删除?我不想读取一个txt并使用删除行创建另一个。我想从现有的txt中删除行。谢谢。


问题答案:

尽管看起来很琐碎,但这是一个非常棘手的问题。对于可变的行长,也许唯一的选择是逐行读取文件以识别目标行offsetlength目标行。然后复制文件的以下部分(从开始)offset,最终将文件长度截断为原始大小减去目标行的长度。我使用a
RandomAccessFile访问内部指针,也按行读取。

该程序需要两个命令行参数:

  • args[0] 是文件名
  • args[1] 是目标行号(从1开始:第一行是#1)
    public class RemoveLine {
        public static void main(String[] args) throws IOException {
            // Use a random access file
            RandomAccessFile file = new RandomAccessFile(args[0], "rw");
            int counter = 0, target = Integer.parseInt(args[1]);
            long offset = 0, length = 0;

            while (file.readLine() != null) {
                counter++;
                if (counter == target)
                    break; // Found target line's offset
                offset = file.getFilePointer();
            }

            length = file.getFilePointer() - offset;

            if (target > counter) {
                file.close();
                throw new IOException("No such line!");
            }

            byte[] buffer = new byte[4096];
            int read = -1; // will store byte reads from file.read()
            while ((read = file.read(buffer)) > -1){
                file.seek(file.getFilePointer() - read - length);
                file.write(buffer, 0, read);
                file.seek(file.getFilePointer() + length);
            }
            file.setLength(file.length() - length); //truncate by length
            file.close();
        }
    }

这是完整的代码,包括一个JUnit测试用例。使用此解决方案的优点是,它应该相对于内存具有完全可伸缩性,即,由于它使用固定的缓冲区,因此其内存需求是可预测的,并且不会根据输入文件的大小而变化。



 类似资料:
  • 问题内容: 我有以下要在node.js中操作的文本文件(“ test.txt”): 我想删除第一行,以使其成为第一行。我怎样才能做到这一点? 问题答案:

  • 问题内容: 我有一个大文件,只需要删除几行,是否有任何方法可以打开新文件并复制整个文本? 编辑:主要问题是,当它在多个txt filse中运行时,该程序失败 问题答案: 有什么方法可以做到而无需打开新文件并复制整个文本? 不,没有。当然,如果您想 安全地 做的话就没有。 而且也不会真正帮助您。它可以让您用相等数量的字节替换文件中的字节序列,但这并不意味着删除一行。 您可以这样使用RAF: 给定初始

  • 假设我有一个txt文件,如下所示: 用户在变量上输入后,txt文件如下: 如何删除空行?

  • 问题内容: 在每行末尾添加\ n,结束程序正常工作,仅在最后一行工作… 请举个例子,我在任何解决方案中都尝试不了什么,而我发现这里不适合我。 问题答案: 您可以分割最后一个字符: 也许更好的方法是使用字符串库:

  • 问题内容: 当我需要时会出现一个新的JPanel(超过了时间限制或用户按下了“提交”按钮)。但是几秒钟后,旧的JPanel的某些元素就会与新的JPanel的组件一起出现。我不明白为什么会这样。 我以为是因为我必须对其他线程更新窗口。但是第一个线程只需将旧面板添加一次(因此,应该完成)。在第二个线程中,我有一个中断的循环(因此,它也应该完成)。 这是我的代码: 问题答案: 从容器(框架)中删除组件(

  • 我的应用程序将txt文件存储在FTP服务器上,该服务器也托管在WebService上。 但是,即使该目录中有txt文件,FTP重置是: