从文件返回空字符串读,没有错误

从文件返回空字符串读,没有错误

问题描述:

我尝试使用下面的代码从一个文件中的字符串:从文件返回空字符串读,没有错误

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()方法,但是字符串我得到的是null。我没有收到任何错误,并且文件有文字(每行一个)。在上面的代码中是错误的还是错误的? 在此先感谢。

你很可能会遇到这个问题,因为你是失败的检查if (file.exists()),然后再返回的randomWordSelection默认值。试试以前答案的建议(并确保检查显而易见的事情 - 例如文件名是正确的!)。

我的回应的主要原因是我注意到代码中的另一个问题。在您指代numLines的两段代码中,您默认将numLines设置为0,然后继续拨打r.nextInt(numLines)而不更改numLines的值。 nextInt(int n)方法返回0(包含)和n(不包含)之间的随机int。如果n是0,它会返回什么?事实上,在这种情况下它会引发错误!总之,你会想用它来生成一个随机值之前设置numLines一些明智的值(在文件中的行数)。

+0

我设置了numlines号码,我更新许可清单读/写外部存储,之后的应用程序被卡住,我得到“背景粘并发标记扫描GC释放AllocSpace对象,0(0B)LOS对象错误, 16%免费......“永远。 – user2057220

Environment.getExternalStorageDirectory() 使用

Environment.getExternalStorageDirectory().getAbsolutePath(); 

Instad给你的完整路径的SD卡。然后,您可以使用标准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(); 

我希望这将帮助你......