Мне было интересно, есть ли способ получить доступ к файлу и его пути из папки с активами в Android Studio?Причина, по которой мне нужен доступ к файлу и его пути, заключается в том, что я работаю с методом, который ТРЕБУЕТ путь к файлу String, и он должен получить доступ к файлу по своему пути String.Тем не менее, в Android Studio я не нашел способ получить доступ к файлу напрямую из значения String его пути.Я решил использовать обходной путь и просто прочитать файл из InputStream и записать файл в OutputStream, но размер файла составляет около 170 МБ, и он слишком интенсивен для записи файла в OutputStream.Моему приложению требуется около 10:00 минут, чтобы загрузить файл, когда я реализую эту стратегию.Я искал по всему сайту и во многих источниках, чтобы найти решение (книги и документация), но не смог найти жизнеспособное решение.Вот пример моего кода:
@Override
public Model doInBackground(String... params){
try {
String filePath = context.getFilesDir() + File.separator + "my_turtle.ttl";
File destinationFile = new File(filePath);
FileOutputStream outputStream = new FileOutputStream(destinationFile);
AssetManager assetManager = context.getAssets();
InputStream inputStream = assetManager.open("sample_3.ttl");
byte[] buffer = new byte[10000000];
int length = 0;
while ((length = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, length);
}
outputStream.close();
inputStream.close();
model = ModelFactory.createDefaultModel();
TDBLoader.loadModel(model, filePath, false);//THIS METHOD REQUIRES THE FILE PATH.
MainActivity.presenter.setModel(model);
}catch(FileNotFoundException e){
e.printStackTrace(System.out);
}
catch(IOException e){
e.printStackTrace(System.out);
}
return model;
}
Как вы видите, метод TDBLoader.loadModel () требует строку для URI файла в качестве второго аргумента, поэтому было бы удобно иметь возможностьполучить доступ к файлу напрямую из папки с активами без использования InputStream.Метод принимает в качестве аргумента (модель Model, строковый URL, логический showProgress).Как я уже упоминал, текущая стратегия, которую я использую, использует слишком много памяти и либо полностью вылетает из приложения, либо занимает 10 минут для загрузки нужного мне файла.Я использую AsyncTask для выполнения этой операции, но из-за продолжительности времени, необходимого для выполнения задачи, которая в этом случае побеждает назначение AsyncTask.
Что еще больше усложняет то, что мне приходится использовать старую версию Apache Jena, потому что я работаю с Android Studio, а официальная версия Apache Jena не совместима с Android Studio.Поэтому я должен использовать порт, которому 8 лет и который не имеет обновленных классов, которые предлагает Apache Jena.Если бы я мог использовать класс RDFParser, я мог бы передать InputStream, но этот класс не существует в более старой версии Apache Jena, которую я должен использовать.
Так что я застрял в этой точке.Метод должен использовать путь URL-адреса String для файла в моей папке ресурсов, но я не знаю, как получить к нему доступ без записи в пользовательский файл из InputStream, но запись в файл из InputStream использует слишком много памяти и силПриложение для сбоя.Если у кого-то есть решение, я буду очень признателен.