java写入文件错误:java.io.FileNotFoundException:文件路径无效

时间:2013-11-24 02:40:08

标签: java file-io fileoutputstream

我有一个关于在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/";

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

更新

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

2 个答案:

答案 0 :(得分:0)

这里有一个可以创建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]作为文件名传递,只需传入一个空字符串"",就可以重现错误。

答案 1 :(得分:0)

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