相对与绝对路径 Java
Relative vs Absolute Paths Java
我明天有一个编程迷你竞赛,我们将被要求在给定的闪存驱动器上创建我们的程序。评委们不会编辑我们的代码,所以它会运行,我担心闪存盘符会改变,然后我的程序将无法找到它需要读入的文本文件。
我一直使用这样的闪存驱动器路径:
FileReader file = new FileReader("E:/BPA/Crypto/input.txt");
有没有办法保证我的程序能够读取文本文件,即使我的闪存驱动器的盘符名称在评委计算机上与我的不同?谢谢!
你可以
- 将文件放入源中
- 使用
Class.getResourceAsStream(String name)
获取文件 的InputStream
例如,如果您有 class x.y.z.A
- 复制
input.txt
到src文件夹进入x/y/z包
- 得到对应的
InputStreamReader
为InputStreamReader fileStream = new InputStreamReader(A.class.getResourceAsStream("input.txt"));
如果您不确定文件所在的驱动器,您可以这样做
char drive = 'A';
String filePath = ":/BPA/Crypto/input.txt";
while(drive != 'Z')
{
try{
Scanner readFromFile = new Scanner(new File(drive + filePath));
readFromFile.close(); //add this if you simply want the path or drvie letter
break;
}catch(FileNotFoundException error)
{
System.out.println("Drive: " + drive + " did not contained file in " + drive + filePath);
}
drive += 1;
}
基本上这个想法是尝试打开文件以从不同的驱动器读取,从 A 开始直到 Y。显然你可以走得更远,但我假设驱动器 A-Y 会安全地耗尽所有无论您身在何处都可能驱动器 运行 您的软件。
当您完成 While 循环时,变量 "drive" 将包含所需驱动器的正确盘符。您可以将其修改为 returns 字母或文件路径的函数,或者在您尝试从文本文件中读取时仅使用一次。由你决定。
我明天有一个编程迷你竞赛,我们将被要求在给定的闪存驱动器上创建我们的程序。评委们不会编辑我们的代码,所以它会运行,我担心闪存盘符会改变,然后我的程序将无法找到它需要读入的文本文件。
我一直使用这样的闪存驱动器路径:
FileReader file = new FileReader("E:/BPA/Crypto/input.txt");
有没有办法保证我的程序能够读取文本文件,即使我的闪存驱动器的盘符名称在评委计算机上与我的不同?谢谢!
你可以
- 将文件放入源中
- 使用
Class.getResourceAsStream(String name)
获取文件 的
InputStream
例如,如果您有 class x.y.z.A
- 复制
input.txt
到src文件夹进入x/y/z包 - 得到对应的
InputStreamReader
为InputStreamReader fileStream = new InputStreamReader(A.class.getResourceAsStream("input.txt"));
如果您不确定文件所在的驱动器,您可以这样做
char drive = 'A';
String filePath = ":/BPA/Crypto/input.txt";
while(drive != 'Z')
{
try{
Scanner readFromFile = new Scanner(new File(drive + filePath));
readFromFile.close(); //add this if you simply want the path or drvie letter
break;
}catch(FileNotFoundException error)
{
System.out.println("Drive: " + drive + " did not contained file in " + drive + filePath);
}
drive += 1;
}
基本上这个想法是尝试打开文件以从不同的驱动器读取,从 A 开始直到 Y。显然你可以走得更远,但我假设驱动器 A-Y 会安全地耗尽所有无论您身在何处都可能驱动器 运行 您的软件。
当您完成 While 循环时,变量 "drive" 将包含所需驱动器的正确盘符。您可以将其修改为 returns 字母或文件路径的函数,或者在您尝试从文本文件中读取时仅使用一次。由你决定。