2017-01-13 8 views
1

У меня завтра есть конкурс мини-программирования, и нам потребуется создать нашу программу на приведенном флеш-накопителе. Судьи не будут редактировать наш код, поэтому он будет работать, и я опасаюсь, что письмо с флеш-накопителем изменится, и тогда моя программа не сможет найти текстовый файл, который необходимо прочитать.Относительный против абсолютных путей Java

Я всегда пользовался пути для моего флэш-диск, как это:

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

есть ли способ для меня, чтобы гарантировать, моя программа будет иметь возможность читать в текстовом файле, несмотря на, если имя письмо для моего флэш-накопитель не то же самое на судья компьютера, как это было на моем? Благодаря!

+0

Ваш код упакован в файл .jar и является текстовым файлом, хранящимся в предсказуемом месте в отношении файла .jar? –

+0

Я бы поместил необходимый текстовый файл ввода относительно того, где когда-либо будет запущена программа –

+0

@RAZ_Muh_Taz, можете ли вы привести мне пример? – RyanWantsToLearn

ответ

3

Вы можете

  1. Поместите файл внутри ваших источников
  2. Используйте Class.getResourceAsStream(String name), чтобы получить InputStream файла

Например, если у вас есть класс x.y.z.A

  1. Copy input.txt в папку src в пакет x/y/z
  2. Получить соответствующие InputStreamReader в InputStreamReader fileStream = new InputStreamReader(A.class.getResourceAsStream("input.txt"));
0

Если вы не уверены в том, что диск файл будет вы могли бы сделать что-то вроде этого

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, переменная «диск» будет содержать правильную букву требуемого диска. Вы можете изменить его как функцию, которая возвращает письмо или, возможно, путь к файлу, или просто использовать его один раз, когда вы пытаетесь прочитать из текстового файла. Вам решать.

+0

@ RyanWantsToLearn вы могли бы что-то подобное найти, независимо от того, какой диск находится в –

+0

, как бы я использовал относительный путь? – RyanWantsToLearn

 Смежные вопросы

  • Нет связанных вопросов^_^