[英]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.