【问题标题】:Adding information to a txt file - Issue with cursor向 txt 文件添加信息 - 光标问题
【发布时间】:2015-01-10 18:52:54
【问题描述】:

所以我正在尝试将文本添加到 txt 文件中,我已成功执行此操作,系统会提示用户他们想要添加的内容,并且当我在运行程序后打开 txt 文件时将其包含在内。

现在,这是我的问题:我第一次尝试向 txt 文件添加内容时,它会创建一个空白行,并且在该行下它将包含用户添加的信息,原因是当 Java 打开我的文件,打字光标在最后一行的底部,没有空格,准备输入信息,像这样:

好的,很酷,所以这意味着每当我从我的 Java 程序向 txt 文件中添加任何内容时,它都会自动在一个新行上,我不需要添加任何 println 间距来输入一个新行。现在这里出现了另一个问题,在 Java 将新文本放入 txt 文件之后,它会将打字光标留在添加的新行的 END 处,而不是在它下面没有数据的新行处。所以这意味着如果我尝试添加两次新信息,它将出现在同一行而不是新信息。所以为了解决这个问题,我只是添加了一个

pw.println();

在我的打印作者开始时声明,以确保它将光标放在新行上。但是现在,当我在添加最后一行代码后第一次尝试添加数据时,它将在最后一行数据和我添加的新数据行之间创建一个空白空间。像这样:

现在,每当用户想要搜索数据库时,因为我在搜索中进行了空检查,每当程序遇到我的原始数据和已添加的新数据之间的空行时,它都不会继续搜索,因此用户添加到数据库中的任何信息都将变得无用,Java 将无法搜索它,因为分隔它的空行。

基本上,要么我保留 pw.println() 并显示所有数据,但在原始数据之间有一个空格,因此无法搜索它,或者我可以删除它,然后删除所有新数据添加出现在同一行,这不是我想要的。

这是给txt文件添加数据的代码:

    public static void add() throws IOException
{
    String filename="Elements.txt";
    PrintWriter pw = new PrintWriter(new FileWriter(filename,true));
    pw.println();
    String element=JOptionPane.showInputDialog(null, "Enter name of element.", "Add an Element", JOptionPane.INFORMATION_MESSAGE);;
    pw.write(element + ",");

    String symbol=JOptionPane.showInputDialog(null, "Enter symbol of element.", "Add an Element", JOptionPane.INFORMATION_MESSAGE);;
    pw.write(symbol + ",");

    String atomicNumber=JOptionPane.showInputDialog(null, "Enter atomic number.", "Add an Element", JOptionPane.INFORMATION_MESSAGE);;
    pw.write(atomicNumber + ",");

    String atomicMass=JOptionPane.showInputDialog(null, "Enter atomic mass", "Add an Element", JOptionPane.INFORMATION_MESSAGE);;
    pw.write(atomicMass + ",");

    String valence=JOptionPane.showInputDialog(null, "Enter # of valence electrons.", "Add an Element", JOptionPane.INFORMATION_MESSAGE);;
    pw.write(valence);

    pw.close();

}

有什么方法可以操纵 txt 文件上的光标以确保添加的所有新数据都能正确显示,以便用户之后可以搜索它?打开 txt 文件并将光标放在我想要的位置不起作用。

【问题讨论】:

    标签: java database cursor cursor-position


    【解决方案1】:

    这个想法是在 end 写任何应该在一行上的内容时执行 println()(它添加一个行结束)。如果你 println() 在任何其他数据之前,它很可能会创建一个空行(除非最后一行没有行尾)。

    String filename="Elements.txt";
    PrintWriter pw = new PrintWriter(new FileWriter(filename,true));
    
    String element= ... ;
    pw.write(element + ",");
    
    // ... more ...
    
    String valence=...;
    pw.write(valence);
    
    pw.println();
    
    pw.close();
    

    【讨论】:

    • 啊,这是有道理的,但是在这样做之后,我尝试输入数据两次,但出于某种奇怪的原因,我仍然得到这个:i.imgur.com/c789DdS.png 在我认为额外的行是由我的密码创建之前。打印();一开始,但即使放在最后它确实如此,我不知道为什么。
    • 您输入了两次哪些数据?根据您的 sn-p 和一些整数,有几行,而不是来自该程序。您可以运行程序,如图所示,在 end (不是在前面)加上 println,它会在另一行之后添加一行。
    • 1,2,3,4,5和6,7,8,9,10是我添加的数据
    • 使用我在原始问题中输入的代码,但使用 pw.println();最后按照你的建议
    • 啊,等等,没关系,在我运行之前它没有保存,所以我运行的是旧版本,把 pw.println() 放在最后就可以了,这是一个我从未想过的简单修复关于啊哈,谢谢指出!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多