Android 中写入锁定文件

2024-03-29

我将一些数据存储在 SD 卡上的文件上,并从不同的线程读取相同的文件。为了避免读取和写入的竞争条件,我想在两种情况下锁定文件(读取和写入)

我心里有两个选择 1)我可以使用同步来做到这一点 2)我可以使用文件锁来做到这一点

我应该选择哪一个?为什么?哪一种内存效率更高?

我知道同步方式,但我不知道如何使用文件锁,所以有人可以告诉我使用文件锁的代码吗?

我尝试使用文件锁,但它在 android 中不起作用,请查看代码。 任何帮助表示赞赏

File syncDatafile = new File(file, "sync.txt");
                FileInputStream fileInputStream = new FileInputStream(syncDatafile);
                java.nio.channels.FileLock lock = fileInputStream.getChannel().lock();
                try{
                    FileWriter writer = new FileWriter(syncDatafile, true);
                    writer.write(data);
                    writer.flush();
                    writer.close();
                }catch(Exception ex){
                    ex.printStackTrace();
                }finally{
                    lock.release();
                    fileInputStream.close();
                }

很抱歉大家,这是我的错误,我使用了用于读取文件的 FileInputStream 。非常抱歉,现在已经修复了

File syncDatafile = new File(file, "sync.txt");
                FileOutputStream fileoutputStream = new FileOutputStream (syncDatafile);
                java.nio.channels.FileLock lock = fileInputStream.getChannel().lock();
                try{
                    FileWriter writer = new FileWriter(syncDatafile, true);
                    writer.write(data);
                    writer.flush();
                    writer.close();
                }catch(Exception ex){
                    ex.printStackTrace();
                }finally{
                    lock.release();
                    fileInputStream.close();
                }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 中写入锁定文件 的相关文章

  • 对象映射器 - YAMLFactory - 由于缺少 _createContentReference 方法而出现异常

    我正在使用最新的 2 13 0 版本的 jackson 当我尝试解析 YAML 文件时 出现此异常 java lang NoSuchMethodError com fasterxml jackson core io ContentRefer
  • 从 JSON 数组创建标记 php mySQL Google Maps v2 android

    我正在尝试从 mySQL 数据库在 Google Maps v2 上创建标记 但它不起作用 地图确实出现了 但没有标记 谁能告诉我出了什么问题以及我需要改变什么 我也尝试过让 getDouble 为 getDouble 0 和 getDou
  • 如何在应用程序中创建会话对象

    在我的应用程序中 我想创建一个用于登录和注销的会话 我不知道如何使用会话 任何人都可以通过提供一些示例来帮助我 我认为会话对象应该是在应用程序开始运行时声明和初始化的静态对象 我遇到了这个问题 并决定将我的会话对象放入 utils 类中 该
  • 如何组合 3 个或更多 CompletionStages?

    如果有 2 个 CompletionStages 我可以将它们与thenCombine method CompletionStage a aCompletionStage getA CompletionStage b bCompletion
  • Android 生命周期哪个事件在生命周期中只触发一次?

    我读过一些博客并访问了一些网站 我想知道哪个事件在生命周期中只触发了一次 阅读博客后我意识到onCreate 方法在生命周期内仅触发一次 我不知道我是对还是错 现在我的问题是 我想触发任何仅在我更改横向或纵向方向时触发一次的事件 而不是在启
  • 在实现接口的类上强制使用单例模式

    我最好用一个例子来解释这个问题 我有一个接口模型可用于访问数据 模型可以有不同的实现 可以以各种格式表示数据 例如 XMl txt 格式等 Model不关心格式 可以说这样的一个实现是myxml模型 现在我想强迫myxml模型以及其他所有实
  • Netty Nio java 中的通信

    我想在 Netty nio 中创建一个具有两个客户端和一个服务器的通信系统 更具体地说 首先 我希望当两个客户端与服务器连接时从服务器发送消息 然后能够在两个客户端之间交换数据 我正在使用本示例提供的代码 https github com
  • 如何从MediaCodec获取解码格式?

    我正在与MediaCodec 我用它来解码 mp4 video MediaCodec 将视频解码为YUV格式 但我需要得到RGBA 一切都很好 但我发现有几种可能的格式 例如YUV420 YUV422等等 因此 据我所知 要进行转换 我需要
  • 覆盖Java中的属性[重复]

    这个问题在这里已经有答案了 在 Java 中 我最近有几个项目 我使用了这样的设计模式 public abstract class A public abstract int getProperty public class B exten
  • 从 Java 应用程序读取的文件是否会调用系统调用?

    我的理解是 请求文件系统路径 例如 aFile 的用户应用程序将调用文件系统并获取所请求文件的虚拟地址 然后应用程序将尝试以该地址作为参数 即作为 CPU 指令 进行读 写操作 执行读取命令时 内存管理单元会将该地址转换为物理地址 并查看页
  • 找不到元素“android.support.constraint.ConstraintLayout”的声明

    我创建了一个名为的 xml 文件activity main sw50dp 但是当我尝试验证它时 它给了我错误 错误 4 42 cvc elt 1 a 找不到元素 android support constraint ConstraintLa
  • 为什么 CompletableFuture 的 thenAccept() 不在主线程上运行

    我在 CompletableFuture 的 SupplyAsync 中处理长时间运行的操作 并将结果放入 thenAccept 中 有时 thenAccept 在主线程上执行 但有时它在工作线程上运行 但我只想在主线程上运行 thenAc
  • 无法获取 android.permission.CLEAR_APP_USER_DATA

    我正在开发需要特殊权限的系统应用程序 由于某种原因 我无法获得 CLEAR APP USER DATA 权限 但我可以使用 INSTALL PACKAGES DELETE PACKAGES 等 什么可能导致这种情况 显现 uses perm
  • 图标和导航视图之间的左边距

    我必须在图标和图标之间添加左边距NavigationView 如下图中箭头所示 我知道根据谷歌规范 这个边距必须有16dp但我需要改变它 我努力了
  • 使用 Retrofit 获取原始 HTTP 响应

    我想从我的 API REST 获取原始 http 响应 我尝试过这个界面 POST login FormUrlEncoded Call
  • Android 处理 ListView 中的多个 EditText 字段

    只是一个基本问题 如果我有几十个 EditText 字段是 ListAdapter 的一部分 那么各个 EditText 字段如何知道它们属于哪一行 目前我正在使用 TextWatcher 来监听文本输入 我尝试扩展 TextWatcher
  • Java 执行器和长寿命线程

    我继承了一些使用 Executors newFixedThreadPool 4 的代码运行 4 个长寿命线程来完成应用程序的所有工作 这是推荐的吗 我读过Java 并发实践 https rads stackoverflow com amzn
  • 新的 Android 项目未创建布局或 Java 文件

    这两天我一直在尝试简单地阅读 Big Nerd Ranch Android 编程书 第一章的前几页 我的问题的要点是 当我创建新的 Android 应用程序时 不会创建布局或 java 文件 我已经从 Android 开发站点安装了 ADT
  • ImageIO.read(...) - 非常慢,有更好的方法吗?

    我正在加载大量将在我的应用程序中使用的图标 我计划在服务器启动时从 jar 中加载所有这些 然而 由于数百张图像加起来刚刚超过 9MB 执行此任务仍然需要 30 秒多的时间 我现在正在一个单独的线程中执行此操作 但这让我想知道我是否在代码中
  • 安装 APK 时出现会话“应用程序”错误

    我在将 Android Studio 1 1 编写的项目导入 Android Studio 2 1 2 时遇到困难 每当在平板电脑上测试应用程序之前构建 gradle 时 我都会收到此错误 下面是错误的屏幕截图 有谁知道是什么问题 我尝试过

随机推荐