我正在研究一种将SQLite数据库表导出到特定目录中的csv文件的方法。我已经把所有的事情都安排好了,只是当我把手机插到我的电脑里时,我很难找到这个文件。我可以在我的手机上看到文件夹和文件,但不在我的电脑上。我正在使用MediaScannerConnection.scanfile方法,但仍然无法让我的计算机定位文件夹和文件。我添加了一个OnCompleted侦听器,它在logcat中返回正确的目录路径,但我仍然无法在计算机上看到它。我知道重新启动会迫使一个完整的重新扫描,但我并不是我的用户我的应用程序,必须这样做,每次。我会在下面贴出源代码。提前谢谢你的帮助。
GameView.java:
case R.id.exportCSV:
gameView.open();
boolean export = gameView.exportTable(game);
gameView.close();
if(export = true){
Toast t = Toast.makeText(getApplicationContext(), "CSV file saved to /Statbook CSV Files Folder", Toast.LENGTH_SHORT);
t.show();
MediaScannerConnection.scanFile(GameView.this, new String[] {Environment.getExternalStorageDirectory().toString()+"/Statbook CSV Files"}, null, new MediaScannerConnection.OnScanCompletedListener() {
@Override
public void onScanCompleted(String arg0, Uri arg1) {
// TODO Auto-generated method stub
Log.i("External Storage", "Scanned " + arg0 + ":" + "-> uri=" + arg1);
}
});exportTable方法:
public boolean exportTable(String fileName) {
// TODO Auto-generated method stub
boolean result = true;
String csvHeaders = "id, Player Number, Player Name, 2 Pointers Made, 2 Pointers Missed, Total 2 Pointers," +
"3 Pointers Made, 3 Pointers Missed, Total 3 Points, Free Throws Made, Free Throws Missed," +
"Total Free Throws, Offensive Rebounds, Defensive Rebounds, Assists, Fouls, Turnovers," +
"Blocks, Steals";
String csvValues = "";
try {
File myDir = new File(Environment.getExternalStorageDirectory()+"/Statbook CSV Files");
if(!myDir.exists()){
myDir.mkdir();
}
File outFile = new File(Environment.getExternalStorageDirectory()+"/Statbook CSV Files",fileName+".csv");
FileWriter writer = new FileWriter(outFile);
BufferedWriter out = new BufferedWriter(writer);
Cursor C = ourDatabase.query(fileName, null,null, null, null, null, null);
if (C != null) {
out.write(csvHeaders);
out.newLine();
C.moveToFirst();
while(!C.isAfterLast()){
for (int i = 0; i < C.getColumnCount(); i++) {
csvValues += C.getString(i) + ",";
}
out.write(csvValues);
out.newLine();
csvValues = "";
C.moveToNext();
}
out.close();
result = true;
}
} catch (IOException e) {
// TODO Auto-generated catch block
result = false;
e.printStackTrace();
}
return result;
}发布于 2014-01-25 17:23:41
我找到了问题的原因。在MediaScannerConnection.scanfile中,我只是将路径传递到存储文件的目录,而不是文件本身的路径。在把这一点加到路径的末尾之后,一切都很顺利。
更新的MediaScannerConnection:
MediaScannerConnection.scanFile(GameView.this, new String[] {Environment.getExternalStorageDirectory().toString()+"/Statbook CSV Files/"+game+".csv"}, null, new MediaScannerConnection.OnScanCompletedListener() {
@Override
public void onScanCompleted(String arg0, Uri arg1) {
// TODO Auto-generated method stub
Log.i("External Storage", "Scanned " + arg0 + ":" + "-> uri=" + arg1);
}https://stackoverflow.com/questions/21319210
复制相似问题