Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android在/data/local/中创建一个文件并写入其中_Java_Android - Fatal编程技术网

Java Android在/data/local/中创建一个文件并写入其中

Java Android在/data/local/中创建一个文件并写入其中,java,android,Java,Android,我使用的是非活动类,我想在/data/local/path中创建一个文件。我正在为此使用Emulator。在这个路径中创建文件后,我想每隔10秒在文件中写入一些字符串 因为我使用的是非活动类,所以我没有上下文,我想不使用上下文 有人能帮我怎么做到这一点吗?提前感谢:) 我的密码是- try { File myFile = new File("/data/local/tmp/welcome-to-java.txt"); myFile.

我使用的是非活动类,我想在/data/local/path中创建一个文件。我正在为此使用Emulator。在这个路径中创建文件后,我想每隔10秒在文件中写入一些字符串

因为我使用的是非活动类,所以我没有上下文,我想不使用上下文

有人能帮我怎么做到这一点吗?提前感谢:)

我的密码是-

try {
                File myFile = new File("/data/local/tmp/welcome-to-java.txt");
                myFile.createNewFile();
                FileOutputStream fOut = new FileOutputStream(myFile);
                OutputStreamWriter myOutWriter = 
                                        new OutputStreamWriter(fOut);
                myOutWriter.append(tempList.toString());
                myOutWriter.close();
                fOut.close();

            } catch (Exception e) {

            }

您需要一个
上下文
实例来访问文件系统:-)但是,实际上不可能“没有上下文为您工作”,因为Android运行时中的每个
对象
实际上都会在一些
上下文
(活动、服务、广播接收器等)中创建,所以只需将该上下文传递到对象:-)

至于如何使用上下文进行操作,只需使用

yourContext.openFileOutput(path, Context.MODE_PRIVATE);
要获得
FileOutputStream
,您需要:-)


编辑:

有一种方法可以避免直接传递
上下文
,但需要注意的是,通常不赞成这样做。也就是说,创建一个定制的
应用程序
类并使其成为单例。这将允许您从任何位置访问
上下文
,但如果您尝试在长时间运行的辅助线程
中使用它,也可能导致严重的内存泄漏。所以,如果你真的需要使用它,就要明智地使用它;-)

简单地说,Android系统的第一次迭代实际上默认提供了静态上下文。我还使用了一些当前的商业应用程序,它们使用应用程序Singleton,没有任何问题。所以这不是一个疯狂的想法。然而,要正确地解决问题,需要大量的自律

我使用的是非活动类,我想在/data/local/path中创建一个文件

生产硬件上没有可访问SAN根目录的
/data/local/
目录

有一种
/data/local/tmp/
似乎是世界可读和世界可写的。我不建议使用它,因为它对所有各方都是开放的,包括攻击者

有人能帮我怎么做到这一点吗


使用Java文件I/O,从
新文件(“/data/local/tmp/welcome to Java.txt”)

不,我的意思是它对我有用,但我不想使用它。我不想触动我的活动文件,让它们将上下文传递给我的非活动文件。在不触动你的活动文件的情况下,你到底想如何运行你的程序?您需要创建它们,并且需要在其中一个中创建文件保存对象,这样您无论如何都可以触摸它们。不,我的意思是我不想编辑用于发送上下文的活动文件。我需要它们来运行我的应用程序。我使用AspectJ从活动文件中获取数据,并将其发送到需要写入内部存储器的非活动文件。我想在不编辑活动文件的情况下使用活动文件。我不知道您为什么要尝试这样做,但在Android中,如果没有上下文实例,则无法访问文件系统。你刚才所描述的似乎有点反模式:-(但请看我的编辑是的,如果我有“上下文”,我知道我的生活会是蛋糕上散步:P但无论如何,非常感谢你的建议和时间:)好的,我用了这个,但当我签入我的tmp文件夹时,没有创建任何文件。我正在使用我在问题(已编辑)中输入的代码@FAZ:我将从实际记录异常开始。
/data/local/tmp/
可能仅可由
adb shell
帐户写入,而不可由应用程序写入。这会让我有点吃惊,因为adb shell帐户在生产硬件上不像在模拟器上那样“特殊”。当我打印异常时,它说java.io.IOException:open failed:EACCES(权限被拒绝);在java.io.File.createNewFile(File.java:939)中,但我在清单文件中添加了必要的权限。@FAZ:“但我在清单文件中添加了必要的权限”--这里没有相关的权限元素。这不是外部存储。显然,
/data/local/tmp/
是为
adb shell
帐户读写的,但不是为应用程序读写的。在这种情况下,在
/data/local/
树中的任何位置编写都不太可能起作用。非常感谢您的时间和帮助:)即使我不知道这个事实。你帮助我学习:)