Когда вы выполняете кастинг из 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
.
Поместите ваш текстовый файл в каталог /assets
в проекте Android. Используйте класс AssetManager
для доступа к нему.
AssetManager am = context.getAssets();
InputStream is = am.open("test.txt");
Или вы также можете поместить файл в каталог /res/raw
, где файл будет проиндексирован и доступен по идентификатору в файле R:
InputStream is = context.getResources().openRawResource(R.raw.test);
Вот как я это делаю:
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")
Вот простой класс, который обрабатывает файлы 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");