【问题标题】:How to delete a data from a file through java?如何通过java从文件中删除数据?
【发布时间】:2009-12-31 19:01:31
【问题描述】:

我想用java读取一个文件。然后,我想从该文件中删除一行而不重写该文件。

我该怎么做?

有人建议我在 RandomAccessFile 的帮助下读取/写入文件而不重写文件。 How to write data to a file through java?

具体来说,该文件包含行。一行包含三个字段 - id、姓名和职业 - 由 \t 分隔。我想通过 Reader 或 InputStream 或任何其他方式读取该文件,然后搜索具有指定关键字(例如 121)的行,然后想要删除整行。

此操作需要在不重写整个文件的情况下执行

【问题讨论】:

  • RandomAccessFile 不允许您在文件流中间插入字节;它只是 覆盖 个字节。这就是它不需要重写文件的原因。如果要在文件中间插入或删除内容,则需要将其他所有内容移过来以腾出空间。
  • ...如果您要删除第一行,这意味着您实际上是在重写整个文件。此外,当您完成轮班后,如何处理文件末尾不再需要的数据?好问题。

标签: java java-io


【解决方案1】:

我认为您不能以任何方式更改文件系统上的文件而不写入文件,包括删除一行。

您的意思是要写入文件而不更改文件的元数据,例如上次修改时间?


根据您更新的问题:

我认为你不能在这里做你要求做的事情。一旦文件被写入,您就无法从文件中删除字节,请注意RandomAccessFile 中没有 deleteByte 或 removeByte 方法。

我建议将文件的内容移动到允许这种面向记录的操作的数据库中。

另一种方法是,您必须重写文件。对不起!

【讨论】:

    【解决方案2】:

    “行”是一个抽象概念——它们只是以“\n”结尾的任意字节序列。 BufferedWriters 和他们的同类不支持这种方式的文本编辑,所以你必须重写整个文件。

    一般来说,你想做的是:

    • 打开阅读器
    • 将内容读入一些合适的数据结构
    • 关闭阅读器
    • 更改此数据结构中需要更改的数据/记录
    • append == false打开FileWriter
    • 将数据结构的内容写入结果文件
    • 关闭FileWriter

    【讨论】:

      【解决方案3】:

      在您的行中添加一个标记,说明您的行是否被删除:这将使软件删除而不是硬件删除。

      如果您必须插入新行,则可以重复使用那些标记为已删除的行。

      【讨论】:

        【解决方案4】:

        下面的代码搜索单个文本文件中的行或字段逐行读取文件 然后行或字段可以替换为“”或任何其他字符串。这里我们使用了pattern和Matcher类。

        如果这不能解决您的问题,请告诉我。

        导入 java.io.; 导入 java.util.regex。; 导入 java.util.Properties; 公共类删除线 {

        public static void main(String[] args) { BufferedReader br = null; 尝试 { 字符串行=空; 文件 f = new File("d:/xyz.txt");

        String replaceString=properties.getProperty("replaceAll.String");
        

        ; br = new BufferedReader(new FileReader("d:/giri/scjp/");

                  while ( (line = br.readLine()) != null )//BufferedReader contains readline method
          {
        
              Pattern p=Pattern.compile(searchString);/*here u an specify the line u want to delete */
              Matcher m=p.matcher(line);
              line=m.replaceAll(replaceString);/*here replace String u can " " so that it will be emptied */
              System.out.println(line);
            } 
              //System.out.println(line);
                   } 
        
              }
        

        } br = new BufferedReader(new FileReader("d:/xyz.txt")); 字符串行 = null;

        }

        catch (FileNotFoundException e)
        {
            System.out.println("File couldnt find");
        
          e.printStackTrace();
        }
        catch (IOException e)
        {
          e.printStackTrace();
        }
        

        }

        }

        【讨论】:

        • 可读性建议:“缩进 [至少] 四个空格以创建转义的
           块。” <a href="/default/index/tourl?u=aHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2VkaXRpbmctaGVscA%3D%3D" target="_blank" rel="nofollow">stackoverflow.com/editing-help</a>
        猜你喜欢
        • 1970-01-01
        • 2014-02-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-11
        • 2020-02-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多