【发布时间】:2021-08-24 16:07:02
【问题描述】:
我在之前的问题中提到过这一点,我目前正在使用共享首选项在应用程序中存储一些 BLE 扫描结果(RSSI 和扫描时间)。这很有效,并且可以通过点击按钮访问最新的扫描数据。
我真正想要的是将所有扫描结果存储在可从应用程序外部访问的文件中(不要与 SD 卡等外部存储设备混淆)。我没有使用模拟器,我在 Android 9 上使用的是三星 Galaxy s8。我看过一些教程,例如:
https://www.youtube.com/watch?v=ZTYR3FBDus4(3 分钟)
https://www.youtube.com/watch?v=EcfUkjlL9RI(11 分钟)
我想知道这个“FileOutputstream onclick 方法”是否可以解释为存储所有扫描的信息,然后我可以通过数据文件目录访问?
我注意到在第一个链接示例中,该文件可通过模拟器访问为 .txt 文件。使用实际的android设备时可以这样做吗?
编辑:添加文件输出流代码
FileOutputStream fos = null;
try {
fos = openFileOutput(FileName, MODE_PRIVATE);
fos.write(RSSI1);
Toast.makeText(MainActivity.this, "Saved To: " + getFilesDir() + "/" + FileName , Toast.LENGTH_LONG).show();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
if (fos!=null){
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
新代码:
//To create file path
File file = new File(Environment.getExternalStorageDirectory(), "Data");
if (!file.mkdirs()){
file.mkdirs();
}
String FilePath = file.getAbsolutePath() + File.separator + FileName;
//to print data to file in filepath
try {
fileOutputStream = new FileOutputStream(FilePath);
fileOutputStream.write(RSSI1);
Toast.makeText(MainActivity.this, "Directory saved is : " + getFilesDir(), Toast.LENGTH_LONG).show();
fileOutputStream.close();
}catch (FileNotFoundException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
【问题讨论】:
-
哪些应用程序应该能够访问该文件?
-
@blackapps 除了立即显示扫描的 BLE 扫描仪应用程序之外,没有。我被要求将扫描数据存储在手机存储中,而不是根据我的理解存储在应用程序中。
-
不清楚。那是写文件的应用程序吗?文件是否由创建文件的应用程序读取?
-
所以 BLE 扫描仪应用程序(我唯一的应用程序)当前正在接收和显示来自传输的数据。该数据是我要存储的数据(因此使用 BLE 扫描仪应用程序写入文件)。理想情况下,该文件的存储方式应允许在不使用 BLE 扫描仪应用程序的情况下打开它,因此只需手机可访问存储中的文件(如文件夹中笔记本电脑上的 txt 文件)即可打开它在手机上(就像下载的图片存储在手机上)这样是否更清晰?
-
不,我不会聊天。请与 Andrea 讨论该答案。
标签: java android android-studio file save