【问题标题】:Relative vs Absolute Paths Java相对路径与绝对路径 Java
【发布时间】:2017-01-13 00:31:00
【问题描述】:

我明天有一个小型编程比赛,我们需要在给定的闪存驱动器上创建我们的程序。评委不会编辑我们的代码,所以它运行,我担心闪存驱动器号会改变,然后我的程序将无法找到它需要读入的文本文件。

我一直使用这样的闪存驱动器路径:

FileReader file = new FileReader("E:/BPA/Crypto/input.txt");

有没有办法让我保证我的程序能够读取文本文件,尽管我的闪存驱动器的字母名称在裁判计算机上与我的不同?谢谢!

【问题讨论】:

  • 您的代码是否打包在 .jar 文件中,文本文件是否存储在相对于 .jar 文件的可预测位置?
  • 我会将您需要的输入文本文件放在相对于程序将要运行的位置
  • @RAZ_Muh_Taz 你能举个例子吗?

标签: java file-io usb text-files usb-flash-drive


【解决方案1】:

你可以

  1. 将文件放入您的源代码中
  2. 使用Class.getResourceAsStream(String name)获取文件的InputStream

例如,如果你有班级x.y.z.A

  1. input.txt复制到src文件夹到x/y/z包中
  2. 获取对应的InputStreamReaderInputStreamReader fileStream = new InputStreamReader(A.class.getResourceAsStream("input.txt"));

【讨论】:

    【解决方案2】:

    如果你不确定文件是什么驱动器,你可以这样做

        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 循环时,变量“驱动器”将包含您想要的驱动器的正确字母。您可以将其修改为返回字母或文件路径的函数,或者在尝试从文本文件中读取时仅使用一次。由你决定。

    【讨论】:

    • @RyanWantsToLearn 无论在什么驱动器中,您都可以通过这样的方式找到它
    • 我将如何使用相对路径?
    猜你喜欢
    • 2012-01-11
    • 2018-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 2010-09-15
    相关资源
    最近更新 更多