簡體   English   中英

如何在Android中創建臨時文件

[英]How to create a temporary file in android

我正在嘗試在應用程序上下文中創建一個臨時文件,並希望使用它來填充應用程序的日志,但由於從應用程序給出的錯誤提示文件不存在而出現問題。 這是我的代碼:

  try {
  String command="logcat -d";
  final File outputFile = File.createTempFile("tempLogFile", ".log", context.getCacheDir());
  ProcessBuilder p = new ProcessBuilder(command + " > " + outputFile.getAbsolutePath());
  p.start().waitFor();

  AsyncHttpPut put = new AsyncHttpPut(url);
  MultipartFormDataBody body = new MultipartFormDataBody();
  body.addFilePart("file", outputFile);
  put.setBody(body);

  AsyncHttpClient.getDefaultInstance().executeString(put, new AsyncHttpClient.StringCallback() {
      @Override
      public void onCompleted(Exception ex, AsyncHttpResponse asyncHttpResponse, String res) {
          outputFile.delete();
          if (ex != null) {
              Log.e(TAG, " Error to update log file to server", ex);
              return;
          }

      }
  });

            } catch (IOException e) {
  Log.e(TAG, "Cannot execute log command:" + command, e);
            } catch (InterruptedException e) {
  Log.e(TAG, "Interrupted while calling a command " + command, e);
}

這是一個例外:

  08-23 12:16:43.558 27173-27976/com.mycome.myApp E/Util: Cannot execute log command:logcat -d
  java.io.IOException: Error running exec(). Command: [logcat -d > /data/data/com.mycome.myApp/cache/tempLogFile-295443322.log] Working Directory: null Environment: [ANDROID_ROOT=/system, EMULATED_STORAGE_SOURCE=/mnt/shell/emulated, LOOP_MOUNTPOINT=/mnt/obb, LD_PRELOAD=libsigchain.so:libNimsWrap.so, ANDROID_BOOTLOGO=1, EMULATED_STORAGE_TARGET=/storage/emulated, EXTERNAL_STORAGE=/storage/emulated/legacy, SYSTEMSERVERCLASSPATH=/system/framework/services.jar:/system/framework/ethernet-service.jar:/system/framework/wifi-service.jar, ANDROID_SOCKET_zygote=9, PATH=/sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin, ANDROID_DATA=/data, ANDROID_ASSETS=/system/app, ASEC_MOUNTPOINT=/mnt/asec, BOOTCLASSPATH=/system/framework/core-libart.jar:/system/framework/conscrypt.jar:/system/framework/okhttp.jar:/system/framework/core-junit.jar:/system/framework/bouncycastle.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/telephony-common.jar:/system/framework/voip-common.jar:/system/framework/ims-common.jar:/system/framework/mms-common.jar:/system/framework/android.policy.jar:/system/framework/apache-xml.jar:/system/framework/dolby_ds.jar:/system/framework/dolby_ds2.jar:/system/framework/qcmediaplayer.jar:/system/framework/WfdCommon.jar:/system/framework/oem-services.jar:/system/framework/qcom.fmradio.jar:/system/framework/org.codeaurora.Performance.jar:/system/framework/vcard.jar:/system/framework/tcmiface.jar, ANDROID_PROPERTY_WORKSPACE=8,0, SECONDARY_STORAGE=/storage/sdcard1, ANDROID_STORAGE=/storage]
  at java.lang.ProcessManager.exec(ProcessManager.java:211)
  at java.lang.ProcessBuilder.start(ProcessBuilder.java:195)
  at com.mycome.myApp.util.Util$LongOperation.doInBackground(Util.java:232)
  at com.mycome.myApp.util.Util$LongOperation.doInBackground(Util.java:215)
  at android.os.AsyncTask$2.call(AsyncTask.java:292)
  at java.util.concurrent.FutureTask.run(FutureTask.java:237)
  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
  at java.lang.Thread.run(Thread.java:818)
   Caused by: java.io.IOException: No such file or directory
  at java.lang.ProcessManager.exec(Native Method)
  at java.lang.ProcessManager.exec(ProcessManager.java:209)
  at java.lang.ProcessBuilder.start(ProcessBuilder.java:195) 
  at com.mycome.myApp.util.Util$LongOperation.doInBackground(Util.java:232) 
  at com.mycome.myApp.util.Util$LongOperation.doInBackground(Util.java:215) 
  at android.os.AsyncTask$2.call(AsyncTask.java:292) 
  at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
  at java.lang.Thread.run(Thread.java:818) 

我已經在我的申請中獲得許可:

  <uses-permission android:name="android.permission.READ_LOGS" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

有人可以告訴我為什么這不起作用嗎?

您試圖不帶參數執行命令“ logcat -d tempfilename ”,而不是帶參數“ -d”和“ tempfilename ”的命令“ logcat”。 操作系統正在尋找名為“ logcat -d tempfilename ”的可執行文件,而不是“ logcat”。

有關有效的代碼段,請參見此問題 (問題本身,而非答案)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM