在Android设备上创建和存储日志文件



我计划通过创建日志来存储应用程序执行的一些结果,然后使用一段python代码解析它并绘制图表来自动化应用程序的测试。

该应用程序是一个WiFi指纹,即它收集信息,如mac id, rss(接收到的信号强度和等级(标准化rss)关于周围环境中的WiFi设备。因此,为了测试这个应用程序,我必须将它带到该位置并记录结果(目前是手动的)。所以logcat不能达到目的。

自动化要求1. 将日志存储到设备中2. 通过usb

访问系统中的日志文件

日志文件格式:

Snapshot: 1
Fingerprint: 1, Rank: 0.23424, Boolean: true
Fingerprint: 2, Rank: 0.42344, Boolean: false
Fingerprint: 3, Rank: 0.23425, Boolean: true
Snapshot: 2
Fingerprint: 1, Rank: 0.75654, Boolean: false
Fingerprint: 2, Rank: 0.23456, Boolean: true
Fingerprint: 3, Rank: 0.89423, Boolean: true 
................

现在我知道基本上有3种持久存储方法(SharedPrefs无论如何都不适合这种情况)。我尝试了内部存储,但即使将文件的模式设置为MODE_WORLD_READABLE,也无法使用Eclipse中的设备文件资源管理器读取文件。

我仍然对使用外部存储存储日志保持警惕。任何关于如何写入设备usb中的文件的教程肯定会有所帮助。

我想结构化要存储的数据,以便使用SQLite进行存储。但这在数据之间建立了许多不必要的关系(国外和国内),使其变得复杂。如果没有出路,那么这里就有龙。

基本上我想写入设备中的文件(我想更容易),然后通过usb连接到我的系统中读取它。如果有任何帮助,我将不胜感激。

无论是否谨慎,外部存储仍然可能是唯一的选择。如果没有设备的root访问权限,你就不能真正获得任何"内部"的东西,除非你可以在设备上的应用程序中阅读。文档为在哪里创建外部文件提供了非常可靠的指导方针,如果您使用的是API Level 8或更高的版本,则可以使用一些额外的函数。我相信你知道这个页面,但这里无论如何:http://developer.android.com/guide/topics/data/data-storage.html#filesExternal

如果你需要任何文件或示例代码…我想我可以挖一些…

EDIT -我将首先按照上述文档中的指导方针确认存储状态。不幸的是,我没有任何在Java中附加文件的经验,所以其他人肯定更有资格回答。这并不包括追加,但我在我的一个个人应用程序中有一个备份程序,看起来像这样。

    File backupPath = Environment.getExternalStorageDirectory();
    backupPath = new File(backupPath.getPath() + "/Android/data/com.maximusdev.bankrecord/files");
    if(!backupPath.exists()){
        backupPath.mkdirs();
    }
    FileOutputStream fos;
    try {
        fos = new FileOutputStream(backupPath.getPath() + "/recordsbackup.txt");
        if(okaytowrite){
            for(int i = 0; i < count; ++i){
                entry = adapter.getItem(i);
                fos.write(entry.toString().getBytes());
                fos.write("n".getBytes());
                fos.write(String.valueOf(entry.dateTime).getBytes());
                fos.write("n".getBytes());
                fos.write(String.valueOf(entry.sign).getBytes());
                fos.write("n".getBytes());
                fos.write(String.valueOf(entry.cleared).getBytes());
                fos.write("n".getBytes());
                fos.write(String.valueOf(entry.transDate).getBytes());
                fos.write("n".getBytes());
                fos.write(entry.category.getBytes());
                fos.write("n".getBytes());
            }
        }
        fos.close();
        Toast.makeText(this, "Backup Complete", Toast.LENGTH_SHORT).show();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
        AlertDialog.Builder delmessagebuilder = new AlertDialog.Builder(this);
        delmessagebuilder.setCancelable(false);
        delmessagebuilder.setMessage("File Access Error");
        delmessagebuilder.setNeutralButton("Okay", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                dialog.dismiss();
            }
        });
        delmessagebuilder.create().show();
    } catch (IOException e) {
        e.printStackTrace();
        AlertDialog.Builder delmessagebuilder = new AlertDialog.Builder(this);
        delmessagebuilder.setCancelable(false);
        delmessagebuilder.setMessage("File Access Error");
        delmessagebuilder.setNeutralButton("Okay", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                dialog.dismiss();
            }
        });
        delmessagebuilder.create().show();
    }

一旦我准备好写入,我将从ArrayAdapter(适配器)中提取一个自定义对象(条目),并将字段值转换为字符串,并使用getBytes()传递给FileOutputStream写入函数。我做了一些研究,有相当多的其他选择在Java/Android文件编写…

我使用了一种非常简单的方法,通过创建FileWriter对象将String消息写入日志文件。

    public static BufferedWriter out;
        private void createFileOnDevice(Boolean append) throws IOException {
                /*
                 * Function to initially create the log file and it also writes the time of creation to file.
                 */
                File Root = Environment.getExternalStorageDirectory();
                if(Root.canWrite()){
                     File  LogFile = new File(Root, "Log.txt");
                     FileWriter LogWriter = new FileWriter(LogFile, append);
                     out = new BufferedWriter(LogWriter);
                     Date date = new Date();
                     out.write("Logged at" + String.valueOf(date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds() + "n")); 
                     out.close();
            }
        }

现在是将新消息写入日志文件的函数。

    public void writeToFile(String message){
            try {
                out.write(message+"n");
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

相关内容

  • 没有找到相关文章

最新更新