我有一个java类,它使用缓冲读取器从文本文件中读取一些数据,并将该数据作为哈希映射返回:
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
public class FrequencyLoader {
public FrequencyLoader() throws FileNotFoundException {
}
public HashMap<String, Double> loadUnigramFrequencies() throws FileNotFoundException, IOException {
HashMap<String, Double> unigramFrequencies = new HashMap<String, Double>();
String line;
String[] splittedLine;
BufferedReader bf = new BufferedReader(new FileReader("unigramFrequencies.txt"));
while ((line = bf.readLine()) != null) {
splittedLine = line.split("\\s");
unigramFrequencies.put(splittedLine[0].trim(), Double.parseDouble(splittedLine[1].trim()));
}
return unigramFrequencies;
}
}
我想在我的android应用程序中使用它,但是当我创建这个类的实例并尝试在android Activity类中执行loadUnigramFrequencies()函数时,我收到一个错误,即应用程序意外停止了。我试图在三星Galaxy S2上运行它。应该将文件放在android项目中的某个位置而不是磁盘上吗?如果是,那么在哪里?
答案 0 :(得分:2)
没有一点logcat它有点琐碎。
unigramFrequencies.put(splittedLine[0].trim(), Double.parseDouble(splittedLine[1].trim()))
例如,如果splittedLine [0]或splittedLine [1]为null,或者parseDouble可能出现数字格式execption,则可能会引发空指针execption
答案 1 :(得分:2)
我认为错误可能就在那里:
BufferedReader bf = new BufferedReader(new FileReader("unigramFrequencies.txt"));
您应在此处提供绝对路径,并首先确保该文件在访问之前存在或处理异常。
如果此文件是最终资产,则应将其放在项目资产文件夹中,并从那里获取文件读取器。
示例(来自here):
AssetFileDescriptor descriptor = getAssets().openFd("unigramFrequencies.txt");
FileReader reader = new FileReader(descriptor.getFileDescriptor());
请注意,您的unigramFrequencies.txt文件应存在于&lt; project&gt; / assets /目录
中答案 2 :(得分:1)
这是在干草堆中搜寻针。
我建议您首先学习如何在Android中使用调试:
http://www.droidnova.com/debugging-in-android-using-eclipse,541.html
另外一些异常处理也不会受到影响:
http://en.wikibooks.org/wiki/Java_Programming/Throwing_and_Catching_Exceptions
以下代码行是非常错误的,似乎你不理解android中的文件存储:
new FileReader("unigramFrequencies.txt")
这里解释:
http://developer.android.com/guide/topics/data/data-storage.html