2015-01-10 45 views
0

所以我想添加文本到一个txt文件,我已经成功地做到这一点,用户提示他们想要添加什么,它包括在我运行我的程序后打开txt文件。添加信息到一个txt文件 - 问题与光标

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

enter image description here

好了,凉凉的,所以这意味着每当我添加任何来自我的Java程序的txt文件,它会自动在一个新的行,我不需要添加任何println间距来输入一个新行。现在,在Java将新文本放入txt文件后,又出现了另一个问题,它会在新行的结尾处保留键入光标,而不是在没有数据的新行下。所以这意味着如果我尝试添加两次新的信息,它会出现在同一行而不是新的。因此,要解决这个问题,我只是在我打印的作家开始加入了

pw.println(); 

声明,以确保它把光标移动到新行。但现在,当我尝试在添加最后一行代码后再次添加数据时,它会在最后一行数据和我添加的新数据行之间创建一个空白空间。像这样:

enter image description here 现在,无论何时用户想要搜索数据库,因为我在我的搜索中有空检查,只要程序遇到我原始数据和已添加的新数据之间的空行它不会继续搜索,因此用户添加到数据库中的任何信息都将变得无用,并且由于分隔它的空行,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文件并将光标放在我想要的位置。

回答

0

这个想法是在末尾处做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(); 
+0

啊,这是有道理的,但是这样做之后,我试着输入数据了两次,而且一些奇怪的原因我仍然得到这样的:http://i.imgur.com/c789DdS.png之前,我想额外行由我的pw.println()创建;在开始的时候,但是即使把它放到了最后,它的确如此,我也不知道为什么。 –

+0

你输入了两次哪些数据?根据你的代码片段和一些整数有几行,而不是来自这个程序。你可以像在* end *(不在前面)的println那样运行程序,它会一行一行地添加一行。 – laune

+0

1,2,3,4,5和6,7,8,9,10是我添加的数据 –