确定。因此,我正在开发一个程序,该程序获取已放入gui中的文本字段的信息,并将该信息放入文本文件中,文件名称是动物的名称和所有者姓氏的名称。
//那部分完成了。
然后能够使用动物名称和所有者姓氏搜索文件,并能够将信息放入单独的文本字段中。这看起来就像您首先记下信息的页面。然后能够将更改的信息保存到同一文本文件中。
现在我的问题是如何从具有不同行的文本文件中获取信息,然后将每行放在自己的String中。
以下是程序中读取文本文件的部分
`import java.io.IOException;
import java.io.FileReader;
import java.io.BufferedReader;
public class ReadFile {
private String path;
public ReadFile(String file_path) {
path = file_path;
}
public String[] OpenFile() throws IOException {
FileReader fr = new FileReader (path);
BufferedReader textReader = new BufferedReader(fr);
int numberOfLines = 20;
String[] textData = new String[numberOfLines];
int i;
for (i=0; i < numberOfLines; i++) {
textData[i] = textReader.readLine();
}
textReader.close();
return textData;
}
int readLines() throws IOException {
FileReader file_to_read = new FileReader(path);
BufferedReader bf = new BufferedReader(file_to_read);
String aLine;
int numberOfLines = 0;
while (( aLine = bf.readLine()) != null) {
numberOfLines++;
}
bf.close();
return numberOfLines;
}
}
`
// Here is where I am using this code
`JButton b7 = new JButton("Done");
b7.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
f4.setVisible(true);
f3.setVisible(false);
scrollPane.revalidate();
scrollPane.repaint();
String namess = names.getText();
na.setText(namess);
String ownerslss = ownersls.getText();
ol.setText(ownerslss);
String file_name =namess + " " + ownerslss + ".txt";
na.setText(namess);
ol.setText(ownerslss);
try {
ReadFile file = new ReadFile (file_name);
String [] aryLines = file.OpenFile();
String aryLiness ="";
int item, space;
for (item=0; item < aryLines.length; item++) {
System.out.println(aryLines[item]);
aryLiness = Arrays.toString(aryLines);
space = aryLines.length;
}
space = aryLines.length;
//< assname is a textarray that is the only way I could get the words to go down the page but it doesn't look good at all. Because it doesn't skip lines...
assname.setSize(20 ,space);
assname.append("" + aryLiness);
panimals.add(assname);
}
catch (IOException wewe) {
System.out.println(wewe.getMessage() );
}
}
});`
答案 0 :(得分:1)
了解数组如何工作非常重要,因为它们经常被使用。
String[] myStringArray = new String[3];
此数组包含3个String
个对象。它基本上和你做过的一样:
String oneString = null; //same as myStringArray[0]
String twoString = null; //same as myStringArray[1]
String threeString = null;//same as myStringArray[2]
这意味着,在您将所有行读入Strings
之后,您可以像这样创建JTextField
:
JTextField myTextField1 = new JTextField(myStringArray[0]);
JTextField myTextField2 = new JTextField(myStringArray[1]);
JTextField myTextField3 = new JTextField(myStringArray[2]);
或者,一次分配一行数组:
JTextField[] myTextFields = new JTextField[3];
myTextFields[0] = new JTextField(myStringArray[0]);
myTextFields[1] = new JTextField(myStringArray[1]);
myTextFields[2] = new JTextField(myStringArray[2]);
现在,想象一下,如果您有300 Strings
和TextFields
,那么您无法将这些行键入300次。这就是为什么for
循环很棒的原因。
JTextField[] myTextFields = new JTextField[300];
for (int i = 0; i < myTextFields.length; i++)
{
myTextFields[i] = new JTextField(myStringArray[i]);
}
不确定您是否意识到,但您目前已将文本文件中的每一行都读入一个名为aryLines
的数组中。然后,在for
循环中打印每个字符串 :
System.out.println(aryLines[item]); //item is starting at 0, goes through every String
aryLines[0]
是你的第一个字符串。 aryLines[1]
是你的第二个..依此类推,直到最后一行。从理论上讲,您可以创建一个BufferedWriter
like shown here并将当前的文本文件完全复制到一个新的文本文件中,只是基本完成您已经在做的事情。在创建BufferedWriter后,您只需使用此代替System.out.println()
:
writer.write(aryLines[item]);
writer.newLine();
将每一行打印到控制台后,我不确定你的意思。通过将数组中的所有字符串组合成一个字符串来创建带有aryLiness
的{{1}} ss
。然后使用整个组合字符串设置TextArray
。