【问题标题】:java writing file error: java.io.FileNotFoundException: Invalid file pathjava写入文件错误:java.io.FileNotFoundException:文件路径无效
【发布时间】:2013-12-08 20:15:23
【问题描述】:

我有一个关于在 eclipse 中在当前项目上写 csv 文件的问题

    public static void Write_Result(String Amount_Time_Dalta) throws IOException{

    File file;
    FileOutputStream fop = null;
    String content = "";
    String All_Result[] =  Amount_Time_Dalta.split("-");
    String path ="/Users/Myname/Documents/workspace/ProjectHelper/"+All_Result[1] + ".csv";
    System.out.println(path);
    content = All_Result[3]+ "," + All_Result[5] + "\n";
    System.out.println(content);
    file = new File(path);
    fop = new FileOutputStream(file);
    file.getParentFile();

    if (!file.exists()) {
        file.createNewFile();
    }


    byte[] contentInBytes = content.getBytes();

    fop.write(contentInBytes);
    fop.flush();
    fop.close();
}

我得到错误是

Exception in thread "main" java.io.FileNotFoundException: Invalid file path
at java.io.FileOutputStream.<init>(FileOutputStream.java:215)
at java.io.FileOutputStream.<init>(FileOutputStream.java:171)
at FileDistributor.Write_Result(FileDistributor.java:59)
at FileDistributor.main(FileDistributor.java:29)

我用过

String path ="/Users/Myname/Documents/workspace/ProjectHelper/";

读取文件的路径。我工作得很好。 但是,当我使用相同的路径将结果写入文件时(可以存在或不存在。我创建或覆盖文件。)它返回 Invalid file path....我不太确定为什么..

更新

刚刚发现有趣的事情。当我只使用 File newTextFile = new File("1000".csv);然后它正在工作。但是,当我替换为 File newTextFile = new File(filename +".csv");它不起作用。

【问题讨论】:

标签: java file-io fileoutputstream


【解决方案1】:

您在此处拥有的是可以创建 File 对象的有效路径:

/Users/Myname/Documents/workspace/ProjectHelper/

但是如果你再看一遍,你会发现它指的是一个目录,而不是一个可写文件。你的文件名是什么?

你的System.out.println 说的是All_Result[1] 的值?

示例代码:

import java.io.IOException;
import java.io.File;
import java.io.FileOutputStream;

public class Test
{
    public static void main(String[] args)
    {
        String[] array = {"1000.csv", "800.csv", "700.csv"};
        File file;
        FileOutputStream fop;

        // Uncomment these two lines

        //String path = "c:\\" + array[0];
        //file = new File(path);

        // And comment these next two lines, and the code still works

        String path = "c:\\";
        file = new File (path + array[0]);

        // Sanity check

        System.out.println(path);

        try
        {
            fop = new FileOutputStream(file);
        }
        catch(IOException e)
        {
            System.out.println("IOException opening output stream");
            e.printStackTrace();
        }

        if (!file.exists())
        {
            try
            {
                file.createNewFile();
            }
            catch(IOException e)
            {
                System.out.println("IOException opening creating new file");
                e.printStackTrace();
            }
        }
    }
}

为了让这段代码中断,不要将array[0]作为文件名传递,只需传入一个空字符串"",你就可以重现你的错误。

【讨论】:

  • MarsAtomic // 它是字符串类型的数组。这将是一个文件名。它会像 1000.csv 文件
  • 当然,但我不是在问“文件名应该是什么?”我在问你文件名实际上是什么。当您将 All_Result[1] 附加到路径时,您可能认为您得到的是“path/1000.csv”,但实际上您得到的是“path/”,因为 All_Result[1] 是空的。你甚至有一个 System.out.println 来仔细检查,那么那里的实际输出是什么?
  • 它将是 1000.csv ....800.csv。我刚刚发现了有趣的事情。当我只使用 File newTextFile = new File("1000".csv);然后它正在工作。但是,当我替换为 File newTextFile = new File(filename +".csv");它不起作用。
  • 再一次,我不是在问文件名是什么。我在问你运行 System.out.println 时它是什么。只需运行代码并告诉我 System.out.println 的字面意思。复制并粘贴输出,句号。
  • 抱歉,误读了您的代码中的某些内容。完成构建路径变量后,立即在调试器中设置断点,并包含原始路径和带有扩展名的文件名。然后看看那个时候 path 的值并告诉我它到底在说什么。我几乎可以肯定它并没有说出你认为它应该说的内容。
【解决方案2】:

我遇到了同样的问题,正在寻找答案。我尝试使用 string.trim() 并将其放入输出流中并且它起作用了。我猜文件路径周围有一些尾随字符或位

【讨论】:

    猜你喜欢
    • 2019-08-07
    • 2015-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多