Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android-can';在真正的机器上不能从SD卡读取TXT文件?_Android_File_Audio_Record - Fatal编程技术网

Android-can';在真正的机器上不能从SD卡读取TXT文件?

Android-can';在真正的机器上不能从SD卡读取TXT文件?,android,file,audio,record,Android,File,Audio,Record,当我在虚拟android(1.5)中运行下面的代码时,它工作得很好,TextSwitcher显示了来自/sdcard/documents/的每个txt文件的前80个字符,但当我在我的三星Galaxy i7500(1.6)上运行它时,TextSwitcher中没有任何内容,但在LogCat中有txt文件的文件名 我的代码: public void getTxtFiles(){ //Scan /sdcard/documents and put .txt files in array F

当我在虚拟android(1.5)中运行下面的代码时,它工作得很好,TextSwitcher显示了来自/sdcard/documents/的每个txt文件的前80个字符,但当我在我的三星Galaxy i7500(1.6)上运行它时,TextSwitcher中没有任何内容,但在LogCat中有txt文件的文件名

我的代码:

      public void getTxtFiles(){
 //Scan /sdcard/documents and put .txt files in array File TxtFiles[]
    String path = Environment.getExternalStorageDirectory().toString()+"/documents/"; 
    String files;
    File folder = new File(path);
    if(folder.exists()==false){if (!folder.mkdirs()) { 
        Log.e("TAG", "Create dir in sdcard failed"); 
        return; 
   }} 
    else{
    File listOfFiles[] = folder.listFiles(); 

    for (int i = 0; i < listOfFiles.length; i++) 
    {

     if (listOfFiles[i].isFile()) 
     {
     files = listOfFiles[i].getName();
         if (files.endsWith(".txt") || files.endsWith(".TXT"))
         {
            if((files.length()-1)>i){resizeArray(TxtFiles, files.length()+10);}
             TxtFiles[i]=listOfFiles[i];
             System.out.println(TxtFiles[i]);
         }
          }
       }}
    }


 private void updateCounter(int Pozicija) {
 if(Pozicija<0){Toast.makeText(getApplicationContext(), R.string.LastTxt, 5).show();
 mCounter++;}
 else if(TxtFiles[mCounter]!=null){
  TextToShow = getContents(TxtFiles[mCounter]);
  if(TextToShow.length()>80)TextToShow=TextToShow.substring(0, 80);
  mSwitcher.setText(TextToShow);
  System.out.println(Pozicija);
  }
 else mCounter--;
 }

   static public String getContents(File aFile) {
    //...checks on aFile are elided
    StringBuilder contents = new StringBuilder();

    try {
      //use buffering, reading one line at a time
      //FileReader always assumes default encoding is OK!
      BufferedReader input =  new BufferedReader(new FileReader(aFile));
      try {
        String line = null; //not declared within while loop
        /*
        * readLine is a bit quirky :
        * it returns the content of a line MINUS the newline.
        * it returns null only for the END of the stream.
        * it returns an empty String if two newlines appear in a row.
        */
        while (( line = input.readLine()) != null){
          contents.append(line);
          contents.append(System.getProperty("line.separator"));
        }
      }
      finally {
        input.close();
      }
    }
    catch (IOException ex){
      ex.printStackTrace();
    }

    return contents.toString();
  }
public void getTxtFiles(){
//扫描/sdcard/documents并将.txt文件放入数组文件TxtFiles[]
字符串路径=Environment.getExternalStorageDirectory().toString()+“/documents/”;
字符串文件;
文件夹=新文件(路径);
if(folder.exists()==false){if(!folder.mkdirs()){
Log.e(“标记”,“SD卡中创建目录失败”);
返回;
}} 
否则{
文件listOfFiles[]=folder.listFiles();
for(int i=0;ii){resizeArray(TxtFiles,files.length()+10);}
TxtFiles[i]=列表文件[i];
System.out.println(TxtFiles[i]);
}
}
}}
}
私有void更新计数器(intpozicija){
if(Pozicija80)TextToShow=TextToShow.substring(0,80);
mSwitcher.setText(TextToShow);
系统输出打印(Pozicija);
}
否则,麦考特——;
}
静态公共字符串getContents(文件文件){
//…删除文件上的检查
StringBuilder内容=新建StringBuilder();
试一试{
//使用缓冲,一次读取一行
//FileReader始终假定默认编码是正确的!
BufferedReader输入=新的BufferedReader(新文件读取器(aFile));
试一试{
String line=null;//未在while循环中声明
/*
*readLine有点古怪:
*它返回一行内容减去换行符。
*它仅在流的末尾返回null。
*如果一行中出现两个换行符,则返回空字符串。
*/
而((line=input.readLine())!=null){
内容。追加(行);
append(System.getProperty(“line.separator”);
}
}
最后{
input.close();
}
}
捕获(IOEX异常){
例如printStackTrace();
}
返回contents.toString();
}
我可以通过LogCat来写这些文件的内容


有什么想法吗?

问题解决了:Android基于Linux内核,并且具有文件权限。我猜我的应用程序没有权限访问/sdcard/documents/

中的那些文件。你能发布相关的logcat输出吗?当然: