繁体   English   中英

如何在内部存储的控制台文件中读取和打印?

[英]how read and print in console files of the internal storage?

如何读取和打印 android 设备内部存储中的控制台文件? tha 中的文件在目录中而不在文件夹中。

我一直在尝试不同的方法,但所有方法都崩溃了有人可以指导我吗? 我尝试此代码但正在崩溃

我尝试过其他方法,但我总是得到这个:

java.lang.NullPointerException: 尝试获取空数组的长度``

 String path = Environment.getExternalStorageDirectory().toString()+"/storage/emulated/0/Android/data/cc.openframeworks.androidMultiOFActivitiesExample/files/data/xml";

            Log.d("Files", "Path: " + path);
            File f = new File(path);

            File file[] = f.listFiles();

        if (file != null) {
            Log.d("Files", "Size: " + file.length);
            for (int i = 0; i < file.length; i++) {
                Log.d("Filxs", "FileName:" + file[i].getName());
            }

        }

但正在崩溃:

java.lang.RuntimeException: Unable to start activity ComponentInfo{cc.openframeworks.androidMultiOFActivitiesExample/cc.openframeworks.androidMultiOFActivitiesExample.OFActivityA}: java.lang.NullPointerException: Attempt to get length of null array

``

为什么会崩溃?

这是我将日志添加到设备内部存储中的答案。

  • 我创建了一个用于日志记录的自定义类。

这是代码。

@SuppressWarnings("ALL")
public class Logging {

    private static final String TAG = "Logging";
    private static final boolean LOG_ENABLE = true;
    private static final boolean DETAIL_ENABLE = true;
    private static boolean storeData = false;
    private static String timeStamp;
    private static Logging logging;
    private String APP_FOLDER_NAME = "YOUR_APP_NAME";
    private SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss", Locale.getDefault());

    private Logging() {
    }

    public static synchronized Logging getInstance() {
        if (logging == null) {
            timeStamp = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss").format(new Date());
            return logging = new Logging();
        } else return logging;
    }

    public synchronized void logToFile(boolean isSendData, String data) {
        if (storeData) {
            try {
                File saveDir = new File(Environment.getExternalStorageDirectory() + "/" + APP_FOLDER_NAME + "/log");
                if (!saveDir.exists())
                    if (!saveDir.mkdirs()) {
                        Log.i(TAG, "logToFile: Log not stored to file as unable to create directory");
                    }
                File saveFile = new File(saveDir, String.format("log_%s.txt", timeStamp));
                //Log.e("tag", "filePath = " + saveDir.getAbsolutePath() + "/" + "log.txt");
                BufferedOutputStream writer = new BufferedOutputStream(new FileOutputStream(saveFile, true));
                String currentDateAndTime = sdf.format(new Date());

                writer.write("\n\n==================\n".getBytes());

                writer.write(isSendData ? "Sent data: ".getBytes() : "Received data: ".getBytes());

                String currentFrameTime = currentDateAndTime + " : \n";
                writer.write(currentFrameTime.getBytes());

                writer.write(data.getBytes());

                writer.flush();
                writer.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    public synchronized void logToFile(String label, String data) {
        if (storeData) {
            try {
                File saveDir = new File(Environment.getExternalStorageDirectory() + "/" + APP_FOLDER_NAME + "/log");
                if (!saveDir.exists())
                    if (!saveDir.mkdirs()) {
                        Log.i(TAG, "logToFile: Log not stored to file as unable to create directory");
                    }
                File saveFile = new File(saveDir, String.format("log_%s.txt", timeStamp));
                //Log.e("tag", "filePath = " + saveDir.getAbsolutePath() + "/" + "log.txt");
                BufferedOutputStream writer = new BufferedOutputStream(new FileOutputStream(saveFile, true));
                String currentDateAndTime = sdf.format(new Date());

                writer.write("\n\n==================\n".getBytes());
                writer.write(label.concat(" : ").getBytes());

                String currentFrameTime = currentDateAndTime + " : \n";
                writer.write(currentFrameTime.getBytes());

                writer.write(data.getBytes());

                writer.flush();
                writer.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    public void v(String TAG, String msg) {
        try {
            if (LOG_ENABLE) {
                Log.v(TAG, buildMsg(msg));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void d(String TAG, String msg) {
        try {
            if (LOG_ENABLE) {
                Log.d(TAG, buildMsg(msg));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void i(String TAG, String msg) {
        try {
            if (LOG_ENABLE && Log.isLoggable(TAG, Log.INFO)) {
                Log.i(TAG, buildMsg(msg));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void w(String TAG, String msg) {
        try {
            if (LOG_ENABLE && Log.isLoggable(TAG, Log.WARN)) {
                Log.w(TAG, buildMsg(msg));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void w(String TAG, String msg, Exception e) {
        try {
            if (LOG_ENABLE && Log.isLoggable(TAG, Log.WARN)) {
                Log.w(TAG, buildMsg(msg), e);
            }
        } catch (Exception e1) {
            e1.printStackTrace();
        }
    }

    public void e(String TAG, String msg) {
        try {
            if (LOG_ENABLE && Log.isLoggable(TAG, Log.ERROR)) {
                Log.e(TAG, buildMsg(msg));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void e(String TAG, String msg, Exception e) {
        if (LOG_ENABLE && Log.isLoggable(TAG, Log.ERROR)) {
            Log.e(TAG, buildMsg(msg), e);
        }
    }

    private String buildMsg(String msg) {
        StringBuilder buffer = new StringBuilder();

        if (DETAIL_ENABLE) {
            final StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[4];

            buffer.append("[ ");
            buffer.append(Thread.currentThread().getName());
            buffer.append(": ");
            buffer.append(stackTraceElement.getFileName());
            buffer.append(": ");
            buffer.append(stackTraceElement.getLineNumber());
            buffer.append(": ");
            buffer.append(stackTraceElement.getMethodName());
        }

        buffer.append("() ] _____ ");
        buffer.append(msg);
        return buffer.toString();
    }
}
  • 要打印正常的错误日志,只需使用: Logging.getInstance().e(TAG, "YOUR LOG");
  • 要在文件中打印: 注意 - 不要忘记为您的应用程序提供存储权限。 Logging.getInstance().logToFile(TAG, "YOUR DATA");

  • 它将您的日志存储到您的应用程序文件夹。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM