文件写入失败,出现java.io.FileNotFoundException:

时间:2018-03-23 06:03:48

标签: java

我有一个返回TreeMap并尝试将该TreeMap中的内容写入文件的方法。在Linux中,我试图在目录中创建一个新文件:/home/sid/AutoFile/,并将当前日期附加到文件名。

这就是我提出的:

public void createReconFile() throws SQLException, IOException {
    Map<String, String> fileInput = new TreeMap<String, String>();
    fileInput = getDiffTableCount();
    Set<String> countKeys = fileInput.keySet();
    Iterator<String> fileInpIter = countKeys.iterator();
    Writer output = null;
    //creating a file with currentDate
    DateFormat df = new SimpleDateFormat("MM/dd/yyyy:HH:mm:ss");
    Date today = Calendar.getInstance().getTime();
    String reportDate = df.format(today);
    System.out.println(reportDate);
    try {
        File file = new File("/home/sid/AutoFile/" + "count" + reportDate);
        output = new BufferedWriter(new FileWriter(file));
        System.out.println("Created new file");
        while(fileInpIter.hasNext()) {
            String tableName = fileInpIter.next();
            String cdp = fileInput.get(tableName);
            output.write(tableName +" " + cdp+"\n");
        }
    } catch(IOException e) {
        System.out.println("File Writing failed");
        e.printStackTrace();
    } catch(Exception e) {
        e.printStackTrace();
    } finally {
        System.out.println("Closing the file...");
        output.close();
    }
}

但它以例外结束:

03/23/2018:05:35:30
File Writing failed
java.io.FileNotFoundException: /home/sid/AutoFile/count03/23/2018:05:35:30 (No such file or directory)
        at java.io.FileOutputStream.open0(Native Method)
        at java.io.FileOutputStream.open(FileOutputStream.java:270)
        at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
        at java.io.FileOutputStream.<init>(FileOutputStream.java:162)

dir:/home/sid/AutoFile/count03/23/2018:05:35:30已经存在,我每次调用该方法时都会尝试创建一个新文件。 谁能让我知道我在这里做的错误是什么?如何使用java正确创建文件。

1 个答案:

答案 0 :(得分:4)

linux中的文件名不能有正斜杠。所以你认为你希望用作文件名的日期格式被linux作为目录。您需要更改日期格式,以使其中没有任何正斜杠,或者您可以使用以下行首先创建目录,然后将该文件写入该目录。

新文件(&#34; / home / ist /&#34; +&#34; count03 / 23&#34;)。mkdirs();

此外,如果您已经有一个目录/ home / sid / AutoFile / count03 / 23/2018:05:35:30,那么您在linux中的同一位置就不能拥有同名文件。