我尝试使用以下代码从文件中获取字符串:
public boolean isExternalStorageReadable() {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state) ||
Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
return true;
}
return false;
}
public String useRawResFile(){
InputStreamReader is = new InputStreamReader(getResources().openRawResource(R.raw.elwords));
LineNumberReader lnr=new LineNumberReader(is);
String randomWord="";
int numLines=0;
Random r = new Random();
lnr.setLineNumber(r.nextInt(numLines));
try{
randomWord = lnr.readLine();
}
catch(IOException e){
e.printStackTrace();
}
return randomWord;
}
public String selRandomWord(){
String randomWordSelection="";
if(isExternalStorageReadable()) {
File path = Environment.getExternalStorageDirectory();
File file = new File(path, "elwords.dat");
try{
if(file.exists()) {
FileReader fr = new FileReader(file);
LineNumberReader lnr=new LineNumberReader(fr);
int numLines=0;
Random r = new Random();
lnr.setLineNumber(r.nextInt(numLines));
try{
randomWordSelection = lnr.readLine();
}
catch(IOException e){
e.printStackTrace();
useRawResFile();
}
}
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
} else {
useRawResFile();
}
return randomWordSelection;
}
我在onCreate中使用了selRandomWord()方法,但我得到的String是null。我没有收到任何错误,文件中有单词(每行一个)。上面的代码有什么不对或错吗? 提前谢谢。
答案 0 :(得分:0)
Environment.getExternalStorageDirectory()
的Instad
使用
Environment.getExternalStorageDirectory().getAbsolutePath();
为您提供SDCard的完整路径。然后,您可以使用标准Java执行常规的文件I / O操作。
前 -
String baseDir = Environment.getExternalStorageDirectory().getAbsolutePath ();
String fileName = "myFile.txt";
File f = new File(baseDir + File.Separator + fileName);
FileInputStream fiStream = new FileInputStream(f);
byte[] bytes;
fiStream.read(bytes);
fiStream.close();
我希望这会对你有帮助......
答案 1 :(得分:0)
您可能会看到此问题,因为您未将检查失败至if (file.exists())
,然后返回默认值randomWordSelection
。试试上一个答案的建议(并确保检查明显的事情 - 例如文件名是正确的!)。
我回答的主要原因是我注意到代码中的另一个问题。在您引用numLines
的两个代码部分中,默认情况下将numLines
设置为0,然后继续调用r.nextInt(numLines)
而不更改numLines
的值。 nextInt(int n)
方法返回0(包括)和n(不包括)之间的随机int。如果n为0,它会返回什么?事实上,在这种情况下它会引发错误!简而言之,在使用numLines
生成随机值之前,您需要将C:\Program Files (x86)\OpenNI2\Redist
设置为一些合理的值(文件中的行数)。