Java 如何将文件写入目录?

Java 如何将文件写入目录?,java,file,Java,File,我正在尝试用Java将文件写入特定目录。我已经在Stack Overflow论坛中查看了许多已经回答的与此相关的问题。然而,我尝试的每一种方法最终都会出现以下错误: java.io.IOException: No such file or directory at java.io.UnixFileSystem.createFileExclusively(Native Method) at java.io.File.createNewFile(File.java:1012) at mainFile

我正在尝试用Java将文件写入特定目录。我已经在Stack Overflow论坛中查看了许多已经回答的与此相关的问题。然而,我尝试的每一种方法最终都会出现以下错误:

java.io.IOException: No such file or directory
at java.io.UnixFileSystem.createFileExclusively(Native Method)
at java.io.File.createNewFile(File.java:1012)
at mainFiles.fileManagers.NewCSV.nJSON(NewCSV.java:40)
at mainFiles.appWindows.UserDashboard$1.run(UserDashboard.java:30)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
代码:


关于如何将文件写入某个目录,有什么建议吗

关于您的代码的一些备注:

  • 在文件之前创建父目录。无法在不存在的目录中创建文件

    file.getParentFile().mkdirs()

  • 删除FileOutputStream代码。您正在对同一文件同时使用FileWriter和FileOutputStream。这是一个错误,因为其中一个可能会覆盖另一个,导致文件在写入后立即被清除

  • createNewFile()不是必需的。只要目录存在,FileWriter或FileOutputStream就可以创建自己的文件(请参见#1)

  • 在finally块中关闭writer,这样即使在写入过程中发生异常,也可以保证底层流已关闭

  • 我不确定isDirectory检查的目的是什么。如果它存在,肯定是一个文件而不是目录。无论哪种方式,
    file.exists()&&file.isDirectory()
    都是不必要的,因为isDirectory已经检查了存在性


    更新代码:
    关于代码的一些备注:

  • 在文件之前创建父目录。无法在不存在的目录中创建文件

    file.getParentFile().mkdirs()

  • 删除FileOutputStream代码。您正在对同一文件同时使用FileWriter和FileOutputStream。这是一个错误,因为其中一个可能会覆盖另一个,导致文件在写入后立即被清除

  • createNewFile()不是必需的。只要目录存在,FileWriter或FileOutputStream就可以创建自己的文件(请参见#1)

  • 在finally块中关闭writer,这样即使在写入过程中发生异常,也可以保证底层流已关闭

  • 我不确定isDirectory检查的目的是什么。如果它存在,肯定是一个文件而不是目录。无论哪种方式,
    file.exists()&&file.isDirectory()
    都是不必要的,因为isDirectory已经检查了存在性


    更新代码: 尝试运行以下代码:

    
    包com.test

    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.FileWriter;
    import java.io.IOException;
    
    public class WriteFile {
    
        public static void main(String[] args) {
            nJSON("test");
        }
    
        public static void nJSON(String username) {
            File file = new File("/home/ivan/Downloads/" + username + ".json");
            try {
                if (file.exists() && file.isDirectory()) {
                    System.out.println(username + ".json exist.");
                } else {
                    String content = "testing";
                    file.createNewFile();
                    FileWriter writer = new FileWriter(file);
                    FileOutputStream os = new FileOutputStream(file);
                    writer.write(content);
                    writer.flush();
                    os.close();
                    writer.close();
    
                    System.out.println(username + ".json created.");
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    

    只需将home/ivan/Downloads/替换为有效的目录路径即可。它基本上是您的代码,没有简单的json。它在我的机器上工作,因此我怀疑您试图写入不存在的目录。

    尝试运行以下代码:

    
    包com.test

    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.FileWriter;
    import java.io.IOException;
    
    public class WriteFile {
    
        public static void main(String[] args) {
            nJSON("test");
        }
    
        public static void nJSON(String username) {
            File file = new File("/home/ivan/Downloads/" + username + ".json");
            try {
                if (file.exists() && file.isDirectory()) {
                    System.out.println(username + ".json exist.");
                } else {
                    String content = "testing";
                    file.createNewFile();
                    FileWriter writer = new FileWriter(file);
                    FileOutputStream os = new FileOutputStream(file);
                    writer.write(content);
                    writer.flush();
                    os.close();
                    writer.close();
    
                    System.out.println(username + ".json created.");
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    


    只需将home/ivan/Downloads/替换为有效的目录路径即可。它基本上是您的代码,没有简单的json。它在我的机器上工作,因此我怀疑您试图写入不存在的目录。

    您的代码在哪里?在我看来,您试图写入的目录似乎不存在。首先创建目录。请注意:我正在使用简单的JSON创建JSON文件。您正在同一个文件上创建一个单独的FileOutputStream。您从不写入它,但您在刷新单独的文件写入程序后关闭它。FileOutputStream是不必要的,并且可能有害。您的代码在哪里?在我看来,您试图写入的目录似乎不存在。首先创建目录。请注意:我正在使用简单的JSON创建JSON文件。您正在同一个文件上创建一个单独的FileOutputStream。您从不向其写入,但在刷新单独的文件写入程序后将其关闭。FileOutputStream是不必要的,并且可能有害。
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.FileWriter;
    import java.io.IOException;
    
    public class WriteFile {
    
        public static void main(String[] args) {
            nJSON("test");
        }
    
        public static void nJSON(String username) {
            File file = new File("/home/ivan/Downloads/" + username + ".json");
            try {
                if (file.exists() && file.isDirectory()) {
                    System.out.println(username + ".json exist.");
                } else {
                    String content = "testing";
                    file.createNewFile();
                    FileWriter writer = new FileWriter(file);
                    FileOutputStream os = new FileOutputStream(file);
                    writer.write(content);
                    writer.flush();
                    os.close();
                    writer.close();
    
                    System.out.println(username + ".json created.");
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }