尝试将数据保存到 android 设备上的可访问文件

Posted

技术标签:

【中文标题】尝试将数据保存到 android 设备上的可访问文件【英文标题】:Trying to save Data to an accessible file on an android device 【发布时间】: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 讨论该答案。 【参考方案1】:

您可以创建自己的目录来存储数据。如果您不知道将文件存储在哪里以使其可访问,最简单的方法应该是说出您存储文件的位置(例如,您可以打开文件资源管理器,获取要保存文件的路径并完成你打开OutputStream)

我找到了video,它解释了如何通过文件资源管理器获取文件的路径。

第二种方法是使用静态路径文件夹来保存应用程序中的所有数据。您可以创建一个File,检查它是否存在,如果不存在,则从根目录创建目录,然后所有用户将打开文件资源管理器来检索文件。

我不知道这是否有用,也许我不明白这个问题(很抱歉)。对不起我的英语:/

【讨论】:

我明白你的意思了!您的视频链接显示了如何在文件资源管理器中找到文件的路径。但是,我只想向文件资源管理器写入一个我可以访问的 txt 文件。这可行吗? 另外,请您看看我的问题中的链接。这是存储到文件资源管理器的好方法吗 您要保存用户可访问的文件吗?是的,是可行的。您所要做的就是获取位置路径(取自文件资源管理器或您想要的位置)并将其放入FileOutputStream 的构造函数中。有时文件浏览器会返回一个File 对象,您可以只传递它。在这里你可以找到一些文档:FileOutputStreamFileFileOutputStream Examples

以上是关于尝试将数据保存到 android 设备上的可访问文件的主要内容,如果未能解决你的问题,请参考以下文章

将图像从 Android 上的可绘制资源保存到 sdcard

尝试将 ajax 调用上的可序列化数据发送到 servlet 时,得到“servlet 临时移动”的响应

在 2021 年制作类似于 Iphone 上的 imessage 应用程序的输入框或文本区域

React Native 将捕获的图像和视频保存到我设备上的自定义文件夹中

保存外部缓存文​​件

如何将数据保存到设备文件?