Как действительно считать текстовый файл из пути к классу в Java

Проверьте переменные среды после того, как убедитесь, что у вас установлен Android SDK. Запустите команду ionic cordova requirements

https://cordova.apache.org/docs/en/latest/guide/platforms/android/index.html#setting-environment-variables [ 113]

Установите их, перезагрузите компьютер и попробуйте собрать заново.

349
задан Ciro Santilli 新疆改造中心法轮功六四事件 4 February 2015 в 05:42
поделиться

6 ответов

С каталогом в пути к классам из класса, загруженного тем же загрузчиком классов, вы должны иметь возможность использовать любое из:

// From ClassLoader, all paths are "absolute" already - there's no context
// from which they could be relative. Therefore you don't need a leading slash.
InputStream in = this.getClass().getClassLoader()
                                .getResourceAsStream("SomeTextFile.txt");
// From Class, the path is relative to the package of the class unless
// you include a leading slash, so if you don't want to use the current
// package, include a slash like this:
InputStream in = this.getClass().getResourceAsStream("/SomeTextFile.txt");

Если они не работают, это означает, что неверно.

Так, например, возьмите этот код:

package dummy;

import java.io.*;

public class Test
{
    public static void main(String[] args)
    {
        InputStream stream = Test.class.getResourceAsStream("/SomeTextFile.txt");
        System.out.println(stream != null);
        stream = Test.class.getClassLoader().getResourceAsStream("SomeTextFile.txt");
        System.out.println(stream != null);
    }
}

И эту структуру каталогов:

code
    dummy
          Test.class
txt
    SomeTextFile.txt

И затем (используя разделитель путей Unix, поскольку я нахожусь в системе Linux):

java -classpath code:txt dummy.Test

Результаты:

true
true
579
ответ дан 23 November 2019 в 00:26
поделиться

Мой ответ не точно, что спрашивают в вопросе. Скорее я даю решение точно, как легко мы можем считать файл в JAVA-приложение от нашего пути к классу проекта.

, Например, предполагают название файла конфигурации , example.xml расположен в пути как below:-

com.myproject.config.dev

, и наш исполнимый файл класса Java находится в ниже path:-

com.myproject.server.main

, теперь просто регистрируются в обоих вышеупомянутый путь, который является ближайшим общим каталогом/папкой от того, где можно получить доступ и dev и основной каталог/папка (com.myproject.server.main - где наш application’s исполнимый класс Java существуется), †“, Мы видим, что это папка/каталог myproject , которая является ближайшим общим каталогом/папкой от того, где мы можем получить доступ к нашему файлу example.xml. Поэтому от исполняемого файла Java класс находится в папке/каталоге основной , мы должны возвратиться два шага как [1 114]../.. / для доступа myproject. Теперь после этого, посмотрите, как мы можем считать file:-

package com.myproject.server.main;

class Example {

  File xmlFile;

  public Example(){
       String filePath = this.getClass().getResource("../../config/dev/example.xml").getPath();
       this.xmlFile = new File(filePath);
    }

  public File getXMLFile() {
      return this.xmlFile;
  }
   public static void main(String args[]){
      Example ex = new Example();
      File xmlFile = ex.getXMLFile();
   }
}
0
ответ дан 23 November 2019 в 00:26
поделиться

вы должны поместить свою «системную переменную» в путь к классам java.

-5
ответ дан 23 November 2019 в 00:26
поделиться

Вы говорите: «Я пытаюсь прочитать текстовый файл, заданный в системной переменной CLASSPATH». Я предполагаю, что это в Windows, и вы используете этот уродливый диалог для редактирования «Системных переменных».

Теперь вы запускаете свою Java-программу в консоли. И это не работает: консоль получает копию значений системных переменных один раз при запуске . Это означает, что любые изменения в диалоговом окне впоследствии не имеют никакого эффекта.

Существуют следующие решения:

  1. Запускать новую консоль после каждого изменения

  2. Используйте set CLASSPATH =. .. в консоли, чтобы установить копию переменной в консоли, и когда ваш код будет работать, вставьте последнее значение в диалоговое окно переменной.

  3. Поместите вызов Java в файл .BAT и дважды щелкните его . Это будет создавать новую консоль каждый раз (таким образом, копируя текущее значение системной переменной).

ВНИМАНИЕ: если у вас также есть пользовательская переменная CLASSPATH , то она затеняет вашу системную переменную. Вот почему обычно лучше поместить вызов вашей Java-программы в файл .BAT и установить там путь к классам (используя set CLASSPATH = ), а не полагаться на глобальный системная или пользовательская переменная.

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

1
ответ дан 23 November 2019 в 00:26
поделиться

Пожалуйста, попробуйте

InputStream in = this.getClass().getResourceAsStream("/SomeTextFile.txt");

Ваши попытки не сработали, потому что только загрузчик классов для ваших классов может загружаться из пути к классам. Вы использовали загрузчик классов для самой системы Java.

25
ответ дан 23 November 2019 в 00:26
поделиться

При использовании Spring Framework (либо в виде набора утилит , либо контейнера - вам не нужно использовать последнюю функцию) вы можете легко используйте абстракцию Resource .

Resource resource = new ClassPathResource("com/example/Foo.class");

Через интерфейс Resource вы можете получить доступ к ресурсу как InputStream , URL , URI или Файл . Изменение типа ресурса, например, ресурса файловой системы, - это простой вопрос изменения экземпляра.

114
ответ дан 23 November 2019 в 00:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: