- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个 Android Service
每天运行,它会进行一些数据同步。它每天下载一次文件并通过 context.openFileOutput
将其缓存到磁盘:
String fileName = Uri.parse(url).getLastPathSegment();
try (FileOutputStream outputStream =
context.openFileOutput(fileName, Context.MODE_PRIVATE)) {
outputStream.write(bytes);
// ...
} catch (IOException e) {
// logging ...
}
这发生在后台 线程上。我还有一个包含 WebView
的 UI。如果通过 context.openFileInput
可用,WebView
将使用这些缓存资源:
@Override
public WebResourceResponse shouldInterceptRequest(
WebView view, WebResourceRequest request) {
String url = request.getUrl().toString();
if (shouldUseCache(url)) {
try {
return new WebResourceResponse(
"video/webm",
Charsets.UTF_8.name(),
context.openFileInput(obtainFileName(url)));
} catch (IOException e) {
// If a cached resource fails to load, just let the WebView load it the normal way.
// logging ...
}
}
return super.shouldInterceptRequest(view, request);
}
这发生在独立于服务的另一个后台线程上。
我可以依靠 Context
实现并确保文件读写是安全的,还是我必须自己处理同步?例如。如果 Service
当前正在将数据写入文件,而 WebView
正在尝试访问它,我会遇到问题吗?如果是这样,我应该如何实现同步?
最佳答案
If the Service is currently writing data to a file and the WebView is trying to access it, will I run into a problem?
在这种情况下,您可以通过在文件名后附加一些内容并在下载完成后改回文件名来将数据写入文件。例如
context.openFileOutput(fileName + ".downloading", Context.MODE_PRIVATE))
稍后,一旦下载完成,将文件重命名为原始 fileName
。我确定您会在 shouldUseCache(url)
中检查文件是否存在,以便它继续正常工作。这将避免在您尝试阅读文件时文件仍在下载的情况。
关于java - Context.openFileInput 和 Context.openFileOutput 之间的同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50913738/
我正在将数据写入 Android 应用程序中的 xml 文件。我查找了如何正确执行文件 IO 并发现我需要使用 openFileOutput。据我所知,我的代码没有任何问题,但它不断在我在以下代码中包
我正在尝试使用不是 Activity 类的类中的 openFileOutput。当我写下面的东西时,它给了我空指针异常- try { Context con = null;
我正在逐步调试以下代码 fragment ,它不会按预期创建或读取文件,也不会引发任何异常。这位于我的应用程序的主要 Activity 中。这些代码行有什么问题吗? public void onCli
我的应用程序权限有问题。我的应用似乎没有在存储上创建文件的权限。 String FILENAME = "hello_file"; String string = "hello world!"; Fil
首先,我在 Main Activity 中编写了一些方法,但我决定它们应该是一个类。 这是我的代码... openFileOutput 和 openFileInput 未定义。任何想法??也许它应该是
这是我本周的菜鸟问题。我正在寻找更多的一般猜测而不是特定代码,也许希望 Android 人员正在关注并纠正这一点: Context.openFileOutput 的 SDK 文档说: Open a p
我想知道使用 context.openFileOutput() 写入文件的实际路径(在存储中),如下所示(跳过异常(exception))。 public static void writeObjec
我正在尝试使用 Wifi 将文件复制到 Android 设备。对于我无法告诉的文件创建工作,但我无法在任何地方找到它...... 我尝试在 Eclipse 上使用 DDMS,但是数据文件夹中没有任何内
我创建了一个程序,用户可以在其中创建一个arrayList,然后将该列表保存到存储设备上的一个文本文件中。我使用了来自 https://developer.android.com/training/b
我创建了一个静态处理程序来从监听传入蓝牙数据的线程接收数据。此处理程序调用:measure_finish2() 并且此方法调用一个名为:measure_finish() 的非静态方法,在最后一个方法中
我像这样将我的文件保存到应用程序的私有(private)内部存储中,然后将该文件传递到 Uri 中,以便我可以将其作为其他 Activity 的结果返回 String filename = new S
这个问题在这里已经有了答案: What file system path is used by Android's Context.openFileOutput()? (4 个答案) 关闭 9 年前
我创建了文件,即 txt 文件,并使用 openFileOutput fn 将值存储到其中。此函数在 data/data/app_name/files 文件夹中创建 txt 文件。现在我正在尝试将 .
我用过很多次openFileOutput。 例子: FileOutputStream fileOutputStream = openFileOutput(fileName, Context.MODE_
我目前正在构建一个应用程序,用户将随着时间的推移生成数据,如果他/她有互联网连接,则将其传输到网络。但是,如果他没有网络访问权限,我需要将这些数据存储在手机中,直到用户恢复他的访问权限,那时我需要恢复
我正在尝试将字符串写入文件,为此我使用 openFileOutput: FileOutputStream fOut = openFileOutput("samplefile.txt",Contex
作为一名 Android 开发新手,我遇到了一些奇怪的问题。我想创建一个类,它方法其他类- Activity -任何可以用于以某种特殊方式处理文件的类。假设为了简单起见,我们将记录一些内容。如果我在
我正在尝试让我的 rss 阅读器保存 URL 地址,以便在重新打开时保存它。但出于同样的原因,openFileOutput 和 openFileInput 是红色的,它表示它无法解析方法。 我们的教授
我正在尝试保存 html 文件。我有扩展 AsyncTask 的类 public class DownloadBook extends AsyncTask { 在这个类中,我有这个方法: privat
我阅读了 openFileOutput 的文档,并看到“打开与此上下文的应用程序包关联的私有(private)文件进行写入。如果文件尚不存在,则创建该文件”( http://developer.and
我是一名优秀的程序员,十分优秀!