在任何计算机中存储文件的相对路径-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.separatorFile.separator
提供与系统相关的默认名称分隔符
字符串。例如:在Microsoft Windows系统上,它是“\”(c:\abc)
。。而在UNIX系统上,此字段的值为“/”。查看此处了解更多信息:告诉我您的包的名称
以及此文件的绝对路径
。还要告诉我您从哪个目录执行java
命令。@VishalK“/filename.csv”
只不过是“filename.csv”
,这意味着他/她正在根文件夹中存储文件,这对我来说很好。我是说两个都很好。