我正在尝试将我的应用程序的日志文件写入外部SD卡。要弄清楚如何执行此操作,我一直在尝试按照示例 HERE 。
该网页上有一段约3/4的部分说:
如果没有预定义的子目录名称适合您的文件,则可以调用getExternalFilesDir()并传递null。这将返回外部存储上应用程序私有目录的根目录。
我的设备没有任何预先定义的目录,我也希望将我的数据保存到外部SD卡。使用以下命令:
$ ADB shell
shell@android:/ $ cd /mnt
shell@android:/ $ ls -F
d ext_sdcard
您可以看到我的外置SD卡。所以,我在外部SD卡上创建了一个目录:
shell@android:/ $ cd ext_sdcard
shell@android:/ $ mkdir MyAwesomeApplication
shell@android:/ $ ls -F
d MyAwesomeApplication
现在是我[使用]开发人员网站上的代码:
public File getDocumentStorageDir(String filename){
File file = new File("/mnt/ext_sdcard/MyAwesomeApplication", filename);
if(!file.getParentFile().mkdirs()){
Log.i(MainActivity.class.getName(), "Directory Not Created!");
}
return file;
}
当我运行我的应用程序时,它有点工作;我立刻得到了这个错误:
E/myPackage.MainActivity: Directory Not Created!
但是它无论如何都会创建日志文件,并成功将数据写入文件。
我的问题是它总是用新数据覆盖日志文件,即使我正在使用它也不会附加:
public boolean isExternalStorageWritable() {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
return true;
}
return false;
}
if(isExternalStorageWritable()){
File logfile = getDocumenetStorageDir("mylogfile.log");
PrintWriter logFileWriter = null;
try {
logFileWriter = new PrintWriter(logfile);
logFileWriter.append("stuff ...");
} catch(FileNotFoundException fnfe){
Log.i(MainActivity.class.getName(), fnfe.getMessage());
} finally {
logFileWriter.close();
}
}
现在,当我使用此命令时:
shell@android:/ $ cd MyAwesomeApplication
shell@android:/ $ ls -F
- mylogfile.log
我看到我的日志文件应该在哪里。但是当我使用这个命令时:
shell@android:/ $ cat mylogfile.log
// only the very latest piece of data is here
我在这里做错了什么?
由于
答案 0 :(得分:-1)
您的问题有两个部分,我会尝试单独解决这些问题。
你永远不应该像你一样硬编码文件位置(即使它只是调试日志记录)。位置<includesConstraint refId="myrule" severity="info" />
可能适用于此设备,但这取决于Android和制造商的版本。您必须使用适当的getter方法来获取正确的目录。在THIS LINK上,您可以找到完整的解释,但根据我对您的用例的理解,您希望使用以下代码:
File file = new File("/mnt/ext_sdcard/MyAwesomeApplication", filename);
您没有显示您是如何创建public static File getLogFile(Context context) {
File folder = getExternalFilesDir("logs");
if(!folder.exists()) {
folder.mkdirs();
}
return new File(folder, "mylogfile.log");
}
的,但我一直使用PrintWriter
课程而没有任何附加问题。
在这个问题中你可以看到(How to append to a text file in android?)。这里有一些代码
FileWriter