在任何计算机中存储文件的相对路径-Java

在任何计算机中存储文件的相对路径-Java,java,file,Java,File,我曾经读过一个关于我的项目的文件。但我也需要储存我不知道怎么做?请帮帮我 为了读取文件,我从链接中获取了代码 InputStream csv = SomeClassInTheSamePackage.class.getResourceAsStream("filename.csv"); 像这样,谁能帮我写一个文件 目前我正在使用以下代码: Writer output = null; output = new BufferedWriter(new FileWriter

我曾经读过一个关于我的项目的文件。但我也需要储存我不知道怎么做?请帮帮我

为了读取文件,我从链接中获取了代码

InputStream csv = 
             SomeClassInTheSamePackage.class.getResourceAsStream("filename.csv");
像这样,谁能帮我写一个文件

目前我正在使用以下代码:

 Writer output = null;
 output = new BufferedWriter(new FileWriter("./filename.csv"));
但它在运行时抛出FileNotFound异常


问题在于定位文件路径。如果我给出绝对路径,它可以正常工作。但是它需要在任何计算机上运行

文件编写器将根据需要创建文件。它不必已经存在


获取此错误的唯一方法是,如果当前工作目录不再存在,或者您没有在该目录中创建文件的权限。

请检查您的权限:

Writer output = null;
if (new File("./filename.csv").canWrite()) {
   System.out.println("You have not permissions");
} else {
   output = new BufferedWriter(new FileWriter("./filename.csv"));
   ...
}

确定..使用以下代码获取文件的路径:

String path = System.getProperty("user.dir");
FileWriter fw = new FileWriter(path+File.separator+"filename.csv");
编辑

下面是一个演示代码,它正在包myPackage中创建文件“pqr.txt”。假设我使用命令
javamypackage.AccessCheck
执行类文件,即从myPackage上方的一个目录执行

package myPackage;
import java.io.FileWriter;
import java.io.File;
public class AccessCheck
{
    protected void callme()
    {

        try
        {
            String name = System.getProperty("user.dir")+File.separator+AccessCheck.class.getPackage().getName()+File.separator+"pqr.txt";
            System.out.println(name);
            FileWriter fw = new FileWriter(name);
        }catch(Exception ex){ex.printStackTrace();}
    }
    public static void main(String st[])
    {
        AccessCheck asc = new AccessCheck();
        asc.callme();
    }
}

不要调用
getResourceAsStream()
,而是调用
class.getResource()
classLoader.getResource()
。这些函数返回一个URL,给出资源的位置。如果资源是文件系统上的普通文件,则URL将是
文件:
URL

获得URL后,可以将其转换为
URI
,并将其传递给
文件
构造函数,该构造函数接受URI。然后可以使用
文件
对象打开文件

请注意,
getResource()
可以返回
文件
构造函数无法处理的URL。例如,如果在jar文件中找到资源,则URL可能如下所示:

jar:file:/C:/path/to/JDK/lib/vm.jar!/java/lang/Object.class

文件
构造函数无法处理这样的URL。这可能是您的问题,也可能不是您的问题。

您是否尝试只写
'filename.csv'
而不是写
'./filename.csv'
?@bernie如果
someClassInTheSamePackage
不在当前包中怎么办?someClassInTheSamePackage表示包中要用作reference@Yuzi你不觉得让我有人在java包中编写文件将是一个严重的安全问题?问题在于定位文件路径。如果我给出绝对路径,它可以正常工作。但是它需要在任何计算机中运行,我不获取File.separator
File.separator
提供与系统相关的
默认
名称分隔符
字符串。例如:在Microsoft Windows系统上,它是“\”
(c:\abc)
。。而在UNIX系统上,此字段的值为“/”。查看此处了解更多信息:告诉我您的
包的名称
以及此
文件的绝对路径
。还要告诉我您从哪个目录执行
java
命令。@VishalK
“/filename.csv”
只不过是
“filename.csv”
,这意味着他/她正在根文件夹中存储文件,这对我来说很好。我是说两个都很好。