如何从 TXT 中删除线路



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

这是一个非常棘手的问题,尽管它看起来微不足道。在行长度可变的情况下,也许您唯一的选择是逐行读取文件以识别目标行的offsetlength。然后从 offset 开始复制文件的以下部分,最终将文件长度截断为其原始大小减去目标行的长度。我使用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 测试用例。使用此解决方案的优点是它应该在内存方面完全可扩展,即由于它使用固定缓冲区,因此其内存要求是可预测的,并且不会根据输入文件大小而变化。

尝试将文件存储到 String 缓冲区中,替换要替换的内容,然后完全替换文件的内容。

您可以通过复制文件中的其余数据,然后刷新文件并最终写入复制的数据来删除一行。以下代码搜索要删除的字符串,并跳过要在字符串中复制的代码。刷新后,字符串生成器的内容被复制到同一个文件

         try {
                InputStream inputStream = openFileInput(FILENAME);
                FileOutputStream fos = openFileOutput("temp", Context.MODE_APPEND);
                if (inputStream != null) {
                    InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
                    BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
                    String receiveString = "";
                    String deleteString = "<string you want to del>";
                    StringBuilder stringBuilder = new StringBuilder();
                    while ((receiveString = bufferedReader.readLine()) != null) {
                        if (!reciveString.equals(deleteline)) {
                            stringBuilder.append(receiveString);
                        }
                    }
                    fos.flush();
                    fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
                    fos.write(stringBuilder.toString().getBytes());
                    fos.close();
                    inputStream.close();
                   }

最新更新