Android-can';在真正的机器上不能从SD卡读取TXT文件?
当我在虚拟android(1.5)中运行下面的代码时,它工作得很好,TextSwitcher显示了来自/sdcard/documents/的每个txt文件的前80个字符,但当我在我的三星Galaxy i7500(1.6)上运行它时,TextSwitcher中没有任何内容,但在LogCat中有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
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输出吗?当然: