Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用java创建文本文件_Java_File_Text_Text Files_Filewriter - Fatal编程技术网

用java创建文本文件

用java创建文本文件,java,file,text,text-files,filewriter,Java,File,Text,Text Files,Filewriter,我在创建具有我想要的名称的文本文件时遇到问题 我想创建一个名为“username”主题的文本文件 private void saveSubjects(){ RegisterFrame r = new RegisterFrame(); String username = r.txtUser.getText();; try{ FileWriter f = new FileWriter(username + "" + "Subjects" + ".tx

我在创建具有我想要的名称的文本文件时遇到问题

我想创建一个名为“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);
    }

}
private void saveSubjects(){
RegisterFrame r=新的RegisterFrame();
字符串username=r.txtUser.getText();;
试一试{
FileWriter f=新的FileWriter(用户名+“+”主题“+”.txt”,true);
字符串主题[]=lstSubjects.getItems();
对于(int i=0;i请尝试以下方法:

String username = r.txtUser.getText();
System.out.println("The loaded username is: " + username);
然后您将看到问题所在:写入文件或获取用户名文本

如果问题在获取文本,考虑其他方式获取它或修改问题,通过删除文件写入部分并指定用户名获取部分。 否则,IDK将返回错误所在的位置


顺便说一句:它是如何工作的?文件根本没有创建?你看到任何错误吗?文件的名称错误?请指定你写文件的代码似乎很好。基于你的代码,我尝试了这个,效果非常好:

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);
    }
}
我想你的问题在别处


请注意,最佳实践规定,可关闭的对象(如
FileWriter
)应在finally块中关闭

假设
newregisterframe()
启动GUI窗口时,问题是您的代码在您有机会键入名称之前运行。相反,您需要使用捕获文本字段的内容,否则获取名称的代码会在窗口打开后立即运行,而您还没有机会键入任何内容

时间线如下所示:

  • RegisterFrame启动一个新线程来显示GUI,而不阻塞代码
  • 您的代码立即从txtUser中提取“”,这当然是空的
  • 现在你输入你的名字
  • 没有发生任何事情,因为代码中没有任何内容关注该操作
  • 相反,它应该是:

  • RegisterFrame启动一个新线程来显示GUI,而不阻塞代码
  • 该方法返回或开始执行不依赖于GUI的工作
  • 现在你输入你的名字
  • 从新线程触发事件侦听器,并执行获取名称和写入文件的相关操作
  • 你必须决定哪种类型的侦听器对你的用例有意义,例如,你可能想等到用户点击一个按钮(比如说“提交”或“写入文件”)并在该按钮上注册一个。然后你把你的用户名轮询和文件写入行为放在该操作中*你就成功了


    *我应该补充一点,事实上,您希望在ActionListeners中尽可能少地执行操作,最好检查用户名是否为空,然后将实际工作传递给另一个线程,例如使用,但出于您的目的,我怀疑不必担心这一点。

    用户名是否始终为空?看起来您可能不需要您无法从RegisterFrame类正确获取它。您是否有任何错误或异常?如果有,请也发布该消息。它如何工作?是否有错误?您在定义用户名(double;;)的行上有语法错误。“但它不工作。”它到底在做什么?正如其他人所评论的,我们需要更多的信息。请查看有关如何填写其余细节的一些提示。特别是,我们需要一些关于什么不起作用的细节。您的代码是否编译?如果不编译,错误消息是什么?如果是,它运行时会发生什么?再次向我们提供任何错误消息和提示/或输出,并解释为什么它不是您想要的。