如何将文件写入目录?

时间:2017-07-06 17:41:35

标签: 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 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)

代码:

public static void nJSON(String username) { 

    File file = new File("src/jsonFiles/" +  username + ".json");

    try {
        if (file.exists() && file.isDirectory()) {
            System.out.println(username + ".json exist.");
        } else {
            json.put("Username", username); 
            json.put("Password", mainFiles.windowsSrc.UserInfo.password); 

            file.createNewFile(); 
            FileWriter writer = new FileWriter(file); 
            FileOutputStream os = new FileOutputStream(file); 

            writer.write(json.toJSONString());
            writer.flush();
            os.close(); 
            writer.close();

            System.out.println(username + ".json created.");

        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

关于如何将文件写入某个目录的任何建议?

2 个答案:

答案 0 :(得分:6)

关于您的代码的一些评论:

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

    O(n^2 * k)

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

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

  4. 关闭finally块中的编写器,以确保即使在写入过程中发生异常也会关闭基础流。

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

    更新的代码:

    file.exists() && file.isDirectory()

答案 1 :(得分:0)

尝试运行此代码:

package 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();
        }
    }
}

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。它可以在我的机器上运行,所以我怀疑你正在尝试写入不存在的目录。