When I run the code bellow in the virtual android (1.5) it works well, TextSwitcher shows first 80 chars from each txt file from /sdcard/documents/ , but when I run it on my Samsung Galaxy i7500 (1.6) there are no contents in TextSwitcher, however in LogCat there are FileNames of txt files.
My Code:
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 alwa开发者_C百科ys 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();
}
And I am able to write contents of those files though LogCat!
Any ideas?
Problem solved: Android is based on Linux kernel and it has file permissions. I guess my app didnt have permissions over those files in /sdcard/documents/.
精彩评论