我在使用我想要的名称创建文本文件时遇到问题。
我想创建一个名为“username”的主题文本文件。
private void saveSubjects(){
RegisterFrame r = new RegisterFrame();
String username = r.txtUser.getText();;
try{
FileWriter f = new FileWriter(username + "" + "Subjects" + ".txt", true);
String subjects[] = lstSubjects.getItems();
for(int i = 0; i<subjects.length; i++){
f.write(subjects[i] + "\r\n");
}
f.close();
JOptionPane.showMessageDialog(null, "Data saved!", "Data Saved", JOptionPane.INFORMATION_MESSAGE);
}catch(Exception e){
JOptionPane.showMessageDialog(null, "Nothing Inputted!", "Error", JOptionPane.ERROR_MESSAGE);
}
}
我想从RegisterFrame中获取用户名,因为它是在那里输入的,但它不起作用。 我知道这很简单,但我还是初学者。我该如何解决这个问题?
提前致谢
答案 0 :(得分:2)
试试这个:
String username = r.txtUser.getText();
System.out.println("The loaded username is: " + username);
然后你会看到你的问题所在:写入文件或获取用户名文本。
如果问题在于获取文本,请考虑获取文本的其他方法或通过删除文件写入部分并指定用户名获取部分来修改问题。
否则,IDK出现错误。
顺便说一句:怎么不行?该文件根本没有创建?你看到有什么错误吗?文件名错了?请注明答案 1 :(得分:0)
您编写该文件的代码似乎没问题。根据你的代码我尝试了这个完美的工作:
public static void main(String[] args) {
FileWriter f = null;
try {
f = new FileWriter("Subjects.txt", true);
String subjects[] = {"subject1", "subject2"};
for (String subject : subjects) {
f.write(subject + "\r\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
IOUtils.closeQuietly(f);
}
}
我说你的问题在其他地方。
请注意,最佳做法规定应在finally块中关闭FileWriter
等可关闭对象
答案 2 :(得分:0)
假设new RegisterFrame()
启动了一个GUI窗口,问题是您的代码在您有机会输入您的名字之前运行。相反,您需要使用event listeners来捕获文本字段的内容,否则获取名称的代码会在窗口打开后立即运行,早在您有机会输入任何内容之前。
时间表是这样的:
相反,它应该是:
您必须确定哪种侦听器对您的用例有意义,例如您可能希望等到用户单击按钮(例如“提交”或“写入文件”)并注册{{ 3}}在那个按钮上。然后你将你的用户名轮询和文件写入行为放在那个动作*中,你就是金色的!
*我应该补充说实际上你想在ActionListeners中尽可能少地做,并且最好检查用户名是否为空,然后将实际工作传递给另一个线程,例如使用ActionListener,但出于您的目的,我怀疑不用担心这一点。