繁体   English   中英

替换Java中的一行文本

[英]Replacing a line of text in Java

我有一个自动柜员机,我需要打开一个文本文件,其中包含以下格式的帐户信息:

  • 帐号
  • 名字
  • 平衡(不会有空白,但该网站不会让我)

文件名为Accountnfomation.txt。

基本上,我需要能够根据用户需要替换/更改“余额”值。 我知道如何在文本文件中找到帐号,但是我不知道如何跳过接下来的两行并进行编辑。 这是我编写的一些代码:

try {
    Scanner Account= new Scanner(new File ("AccountInformation.txt"));
    FileOutputStream Account2= new FileOutputStream ("AccountInformation.txt",true);
    while (Account.hasNextLine()) {
        String nextToken = Account.next();
        if (nextToken.equalsIgnoreCase(MyLoginID)) { //searches for specific match
            // the idea here would to be to edit balance amount 
        }
    }
}

到目前为止,这就是我所拥有的。 它会找到帐号,但是我不知道下一步该怎么做。

在您遇到的问题中,最好先更改,更改并保持其他所有内容不变。 不幸的是,文件不是行的集合,而是字节的集合。 如果要将“ 10”更改为“ 1000”,则需要插入一些新的字节,这意味着其后面的所有内容都需要向下移动几个字节(假设为utf8,则大概为四个左右)。

在现实世界中,我们通过不将数据存储在平面文件中来解决此问题。 假设您仍然想要一种非常简单的,基于文件的,人类可读的格式:

  • 每个条目使用一个文件。 您将拥有一个包含许多文件的目录,但是重写更改的文件和按文件名建立索引的艰巨工作将由os完成。
  • 使用固定的字段宽度格式。 定义每个字段的宽度,然后跳到所需的数据。 您可以像访问大型数组一样访问数据。
  • 使用预定格式和易于使用的工具进行解析和处理。 想到XML和CSV

使用nio:

Path path = FileSystems.getDefault().getPath(filePath);
try {

    List<String> lines = Files.readAllLines(path);

} catch (IOException e) {
        e.printStackTrace();
}

因此,根据您的格式余额,索引为3(没有任何空行)。 因此,您调用lines.set(3, newBalance); ,再次遍历这些行,将它们添加到另一个StringBuilder然后使用StringBuildertoString()方法将内容存储在文件中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM