Чтение простого текстового файла

Когда вы выполняете кастинг из Object, вы распаковываете из типа обертки ... и в основном вы можете удалить только исходный тип. Фактически это относится к соответствующему типу-оболочке, а затем к вызову соответствующего метода xxxValue. Таким образом, это:

Object x = ...;
double d = (double) x;

эквивалентно:

Object x = ...;
double d = ((Double) x).doubleValue();

То, что приведение к Double, очевидно, завершится ошибкой, если x не является ссылкой на Double .

Итак, ваш проблемный код эквивалентен:

Object a = Double.valueOf(1.5); // Auto-boxing in the original code
int b = ((Integer) a).intValue(); // Unboxing in the original code
System.out.println(b);

. Надеюсь, теперь понятно, почему это произойдет, потому что первая строка создает Double, который вы пытаетесь для перевода на Integer.

115
задан Irwin Nawrocki 14 October 2017 в 11:35
поделиться

3 ответа

Поместите ваш текстовый файл в каталог /assets в проекте Android. Используйте класс AssetManager для доступа к нему.

AssetManager am = context.getAssets();
InputStream is = am.open("test.txt");

Или вы также можете поместить файл в каталог /res/raw, где файл будет проиндексирован и доступен по идентификатору в файле R:

InputStream is = context.getResources().openRawResource(R.raw.test);
180
ответ дан Sebastian Hojas 14 October 2017 в 11:35
поделиться

Вот как я это делаю:

public static String readFromAssets(Context context, String filename) throws IOException {
    BufferedReader reader = new BufferedReader(new InputStreamReader(context.getAssets().open(filename)));

    // do reading, usually loop until end of file reading  
    StringBuilder sb = new StringBuilder();
    String mLine = reader.readLine();
    while (mLine != null) {
        sb.append(mLine); // process line
        mLine = reader.readLine();
    }
    reader.close();
    return sb.toString();
}

использовать его следующим образом:

readFromAssets(context,"test.txt")
23
ответ дан Suragch 14 October 2017 в 11:35
поделиться

Вот простой класс, который обрабатывает файлы raw и asset:

открытый класс ReadFromFile {

public static String raw(Context context, @RawRes int id) {
    InputStream is = context.getResources().openRawResource(id);
    int size = 0;
    try {
        size = is.available();
    } catch (IOException e) {
        e.printStackTrace();
        return "";
    }
    return readFile(size, is);
}

public static String asset(Context context, String fileName) {
    InputStream is = null;
    int size = 0;
    try {
        is = context.getAssets().open(fileName);
        AssetFileDescriptor fd = null;
        fd = context.getAssets().openFd(fileName);
        size = (int) fd.getLength();
        fd.close();
    } catch (IOException e) {
        e.printStackTrace();
        return "";
    }
    return readFile(size, is);
}


private static String readFile(int size, InputStream is) {
    try {
        byte buffer[] = new byte[size];
        is.read(buffer);
        is.close();
        return new String(buffer);
    } catch (Exception e) {
        e.printStackTrace();
        return "";
    }
}

}

Например:

ReadFromFile.raw(context, R.raw.textfile);

И для файлов активов:

ReadFromFile.asset(context, "file.txt");
0
ответ дан ucMedia 14 October 2017 в 11:35
поделиться
Другие вопросы по тегам:

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