明天我有一个编程迷你比赛,我们将被要求在给定的闪存驱动器上创建我们的程序。评委不会编辑我们的代码,所以它运行,我担心闪存驱动器号会改变,然后我的程序将无法找到它需要读入的文本文件。
我一直使用这样的闪存驱动器路径:
FileReader file = new FileReader("E:/BPA/Crypto/input.txt");
有没有办法让我保证我的程序能够读取文本文件,尽管我的闪存驱动器的字母名称在法官计算机上与我的不同?谢谢!
明天我有一个编程迷你比赛,我们将被要求在给定的闪存驱动器上创建我们的程序。评委不会编辑我们的代码,所以它运行,我担心闪存驱动器号会改变,然后我的程序将无法找到它需要读入的文本文件。
我一直使用这样的闪存驱动器路径:
FileReader file = new FileReader("E:/BPA/Crypto/input.txt");
有没有办法让我保证我的程序能够读取文本文件,尽管我的闪存驱动器的字母名称在法官计算机上与我的不同?谢谢!
您可以
Class.getResourceAsStream(String name)
获取InputStream
文件例如,如果你有课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 的不同驱动器读取。显然你可以走得更远,但我会假设驱动器 AY 会安全地耗尽所有可能的驱动器,无论你在哪里运行你的软件。
当你得到我们的 While 循环时,变量“驱动器”将包含你想要的驱动器的正确字母。您可以将其修改为返回字母或文件路径的函数,或者在尝试从文本文件中读取时仅使用一次。由你决定。