Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/151.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 通往外部存储的安全路径_Java_Android - Fatal编程技术网

Java 通往外部存储的安全路径

Java 通往外部存储的安全路径,java,android,Java,Android,对于我的应用程序,我有一个相当大的数据库,需要存储在用户的设备上。我计划在将来改变这一点。但是,现在,我希望将其存储到用户的外部存储(如果可用)中,而不是填充用户的内部存储。我可以使用什么方法获得到外部存储器的安全(也就是说,在大多数设备上都适用)路径 File rootPath = Environment.getExternalStorageDirectory(); String StorageDir = new File(rootPath.getPath()+"/"+DirectoryNam

对于我的应用程序,我有一个相当大的数据库,需要存储在用户的设备上。我计划在将来改变这一点。但是,现在,我希望将其存储到用户的外部存储(如果可用)中,而不是填充用户的内部存储。我可以使用什么方法获得到外部存储器的安全(也就是说,在大多数设备上都适用)路径

File rootPath = Environment.getExternalStorageDirectory();
String StorageDir = new File(rootPath.getPath()+"/"+DirectoryName);
其中DirectoryName是要使用的外部存储中的子目录的名称。没有人向我报告任何问题。

我使用

File rootPath = Environment.getExternalStorageDirectory();
String StorageDir = new File(rootPath.getPath()+"/"+DirectoryName);

其中DirectoryName是要使用的外部存储中的子目录的名称。没有人向我报告任何问题。

您可以获得存储数据的根路径。我认为这将是最安全的案例

String root = Environment.getExternalStorageDirectory().toString();
File dir = new File(root + "/your_folder");
dir.mkdirs();
dir.setReadOnly();

您可以获得存储数据的根路径。我认为这将是最安全的案例

String root = Environment.getExternalStorageDirectory().toString();
File dir = new File(root + "/your_folder");
dir.mkdirs();
dir.setReadOnly();

我有一个三星galaxy s3(运行android 4.1.2),我的内存名为sdCard0,外部sd卡名为extSdCard

因此,Environment.getExternalStorageDirectory()返回sdCard0的路径,该路径是我的内部电话内存

在这种情况下,您可以使用以下命令获取外部存储器的实际路径。但是,不建议这样做。我建议你按照医生说的做

上述方法在大多数情况下都有效

 File dir = new File(externalpath + "/MyFolder");
 if(!dir.exists)
 {
 dir.mkdirs();
 dir.setReadOnly();
 }
不要忘记在清单文件中添加权限

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

我有一个三星galaxy s3(运行android 4.1.2),我的内存名为sdCard0,外部sd卡名为extSdCard

因此,Environment.getExternalStorageDirectory()返回sdCard0的路径,该路径是我的内部电话内存

在这种情况下,您可以使用以下命令获取外部存储器的实际路径。但是,不建议这样做。我建议你按照医生说的做

上述方法在大多数情况下都有效

 File dir = new File(externalpath + "/MyFolder");
 if(!dir.exists)
 {
 dir.mkdirs();
 dir.setReadOnly();
 }
不要忘记在清单文件中添加权限

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

我们可能想考虑获取父目录……< /P>

String myPath = Environment.getExternalStorageDirectory().getParent();
//mypath = /storage
就我而言,我有一个GS4和一个注释10.1。上面返回了一个名为“存储”的文件夹,其中包含sdCard0(内部)和extSdCard(存储卡)文件夹

我正在玩一个文件浏览器类型的应用程序,但我只对显示挂载感兴趣。这将在使用.ishiden()和.canRead()方法筛选出系统文件夹后,在ListView中显示extCard和sdcard0

公共类MainActivity扩展活动{
私有ListView文件;
私有文本视图标签;
私有列表项=null;
私有列表路径=null;
私有字符串内插,外插;
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
lvFiles=(ListView)findViewById(R.id.lvFiles);
label=(TextView)findViewById(R.id.tvLabel);
extRoot=Environment.getExternalStorageDirectory().getParent();
label.setText(extRoot);
显示文件(extRoot);
}
/**充气菜单*/
@凌驾
公共布尔onCreateOptions菜单(菜单){
MenuInflater m=getMenuInflater();
m、 充气(右菜单、主菜单、菜单);
返回super.onCreateOptions菜单(菜单);
}
私有void显示文件(字符串p){
文件f=新文件(p);
File[]files=f.listFiles();
item=newarraylist();
路径=新的ArrayList();

对于(int i=0;i),我们可能想考虑获取父目录……< /p>
String myPath = Environment.getExternalStorageDirectory().getParent();
//mypath = /storage
在我的例子中,我有一个GS4和一个注释10.1。上面返回了一个名为“存储”的文件夹,其中包含sdCard0(内部)和extSdCard(存储卡)文件夹

我正在玩一个文件资源管理器类型的应用程序,但我只对显示挂载感兴趣。这会在使用.ishiden()和.canRead()方法过滤掉系统文件夹后,在ListView中显示extCard和sdcard0

公共类MainActivity扩展活动{
私有ListView文件;
私有文本视图标签;
私有列表项=null;
私有列表路径=null;
私有字符串内插,外插;
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
lvFiles=(ListView)findViewById(R.id.lvFiles);
label=(TextView)findViewById(R.id.tvLabel);
extRoot=Environment.getExternalStorageDirectory().getParent();
label.setText(extRoot);
显示文件(extRoot);
}
/**充气菜单*/
@凌驾
公共布尔onCreateOptions菜单(菜单){
MenuInflater m=getMenuInflater();
m、 充气(右菜单、主菜单、菜单);
返回super.onCreateOptions菜单(菜单);
}
私有void显示文件(字符串p){
文件f=新文件(p);
File[]files=f.listFiles();
item=newarraylist();
路径=新的ArrayList();

对于(int i=0;iYep),KitKat现在提供了与辅助外部存储设备交互的API:

新的
Context.getExternalFilesDirs()
Context.getExternalCacheDirs()
方法可以返回多个路径,包括主设备和辅助设备。然后可以对它们进行迭代并检查
Environment.getStorageState()
File.getFreeSpace()
以确定存储文件的最佳位置。这些方法也可在support-v4库的
ContextCompat
上找到

另外请注意,如果您只想使用
上下文返回的目录
,则不再需要
读取
写入外部存储
权限。今后,您将始终拥有对这些目录的读/写访问权限,而不需要额外的权限

应用程序还可以在解除权限请求后继续在旧设备上工作,如下所示:

<uses-permission
    android:name="android.permission.WRITE_EXTERNAL_STORAGE"
    android:maxSdkVersion="18" />

是的,KitKat现在提供了与辅助外部存储设备交互的API:

新的
Context.getExternalFilesDirs()
Context.getExternalCacheDirs()
方法可以