Вот что я делаю в упражнении для буферизованного чтения: расширение / изменение в соответствии с вашими потребностями
BufferedReader reader = null;
try {
reader = new BufferedReader(
new InputStreamReader(getAssets().open("filename.txt")));
// do reading, usually loop until end of file reading
String mLine;
while ((mLine = reader.readLine()) != null) {
//process line
...
}
} catch (IOException e) {
//log the exception
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
//log the exception
}
}
}
РЕДАКТИРОВАТЬ: Мой ответ, возможно, бесполезен, если ваш вопрос о том, как сделать это вне деятельности. Если ваш вопрос заключается в том, как просто прочитать файл из ресурса, то ответ выше.
ОБНОВЛЕНИЕ :
Чтобы открыть файл с указанием типа, просто добавьте тип в вызов InputStreamReader следующим образом.
BufferedReader reader = null;
try {
reader = new BufferedReader(
new InputStreamReader(getAssets().open("filename.txt"), "UTF-8"));
// do reading, usually loop until end of file reading
String mLine;
while ((mLine = reader.readLine()) != null) {
//process line
...
}
} catch (IOException e) {
//log the exception
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
//log the exception
}
}
}
РЕДАКТИРОВАТЬ
Как говорит @Stan в комментарии, код, который я даю, не суммирует строки. mLine
заменяется каждый проход. Вот почему я написал //process line
. Я предполагаю, что файл содержит какие-то данные (например, список контактов), и каждая строка должна обрабатываться отдельно.
Если вы просто хотите загрузить файл без какой-либо обработки, вам нужно будет подводить итоги mLine
на каждом проходе, используя StringBuilder()
и добавляя каждый проход.
ДРУГОЕ РЕДАКТИРОВАНИЕ
Согласно комментарию @Vincent я добавил finally
блок.
Также обратите внимание, что в Java 7 и выше вы можете использовать try-with-resources
для использования AutoCloseable
иCloseable
более поздних версиях возможности недавней Java.
КОНТЕКСТ
В комментарии @LunarWatcher указывает, что getAssets()
находится class
в context
. Таким образом, если вы вызываете его вне, activity
вам нужно обратиться к нему и передать экземпляр контекста в действие.
ContextInstance.getAssets();
Это объясняется в ответе @Maneesh. Так что, если это полезно для вас, проголосуйте за его ответ, потому что именно он указал на это.
finally {reader.close();}
.context.getAssets(.....)
работает только в Activity в любом другом классе, который вы должны использовать
Context
для него.Сделать конструктор для класса Utils передачей ссылки на активность (безобразно) или контекста приложения в качестве параметра для него. Используя это, используйте getAsset () в вашем классе Utils.
источник
Context
.Лучше поздно, чем никогда.
У меня были трудности с чтением файлов построчно при некоторых обстоятельствах. Приведенный ниже метод является лучшим, который я нашел, и я рекомендую его.
Использование:
String yourData = LoadData("YourDataFile.txt");
Где предполагается, что YourDataFile.txt находится в активах /
источник
stream.available()
.источник
input = new BufferedReader(new InputStreamReader(fIn));
.источник
однострочное решение для котлина:
источник
getAssets()
Метод будет работать, когда вы вызываете внутри класса Activity.Если вы вызываете этот метод в классе, отличном от Activity, вам нужно вызывать этот метод из Context, который передается из класса Activity. Ниже приведена строка, по которой вы можете получить доступ к методу.
ContextInstance
может быть передано как класс активности.источник
Чтение и запись файлов всегда были многословны и подвержены ошибкам. Избегайте этих ответов и просто используйте Okio :
источник
IOException
блок try / catch 2) Закрытие потоков в случае возникновения исключения 3) Этот код читает одну строку, а не весь файл. С точки зрения производительности, эта библиотека, безусловно, является в своем роде, без сомнения. Теперь, скажите мне, я все еще должен избегать "этих ответов" и использовать Okio только для чтения файлов? Ответ НЕТ, если он уже не является частью вашего приложения.Вот метод для чтения файла в ресурсах:
источник
Вы можете загрузить контент из файла. Считайте, что файл присутствует в папке активов.
Теперь вы можете получить контент, вызвав функцию следующим образом
Учитывая, что data.json хранится в Application \ app \ src \ main \ assets \ data.json
источник
В MainActivity.java
Кроме того, вы можете создать отдельный класс, который делает всю работу
На мой взгляд, лучше создать интерфейс, но это не обязательно
источник
Если вы используете какой-либо другой класс, кроме Activity, вы можете сделать, как,
источник
Используя Kotlin, вы можете сделать следующее, чтобы прочитать файл из ресурсов в Android:
источник
Может быть, уже слишком поздно, но ради других, которые ищут персиковые ответы:
источник
cityfile.txt
источник
File no longer available That file has now been permanently removed and cannot be recovered
Класс Scanner может упростить это.
источник
@HpTerm ответить на версию Kotlin:
источник
var mLine:String
должен бытьvar mLine:String?
var data: String?
должен бытьvar data = ""
возвращаемый тип должен бытьString
Вот способ , чтобы получить
InputStream
для файла вassets
папке безContext
,Activity
,Fragment
илиApplication
. Как вы получаете данные из этогоInputStream
зависит от вас. Есть много предложений для этого в других ответах здесь.Котлин
Ява
Все ставки отключены, если кастом
ClassLoader
находится в игре.источник