当前位置:首页 » 存储配置 » 私有存储目录

私有存储目录

发布时间: 2023-08-28 01:00:39

❶ 如何建立自己的私有云存储

建立私有云存储的步骤:
第一步:预装软件。
ownCloud 内核是用php5写的,支持sqlite、MySQL、Oracle以及PostgreSQL等数据库。为了简单,我们将用MySQL数据库。在你的Linux系统下你需要安装以下软件:

PHP 安装包:php5, php5-gd, php-xml- parser,php5-intl

数据库驱动:php5-mysql(如果你使用其他数据库,需要安装相应的数据库以及驱动)

Curl 安装包:curl, libcurl3, php5-curl

SMB 客户端:smbclient (这个用来挂载windows共享文件夹的)

Web 服务器:apache2
如果你的Linux是基于Debian的,你可以运行下面的命令一键安装所有的软件:
$ sudo apt-get install apache2 php5 php5-gd php-xml-parser php5-intl php5-sqlite php5-mysql smbclient curl libcurl3 php5-curl mysql-server
第二步:安装ownCloud——设置web 根目录。
从 网站上下载最新版的ownCloud,对于本教程,我们使用owncloud-4.5.6 版本。到此,我们需要设置web服务器的根目录,对于基于Debian发行版的Linux系统,根目录为/var/www,将ownCloud安装包解压到此目录下。
第三步:安装ownCloud——配置web服务器。
这一步我们要为 ownCloud配置Apache服务器,OwnCloud需要启用 Apache上 .htaccess 文件,.htaccess文件(或者"分布式配置文件")提供了针对目录改变配置的方法。为了启用web服务器上的.htaccess,可以通过 Apache配置文件(基于Den系统是/etc/apache2/sites-enabled/000-default)的 AllowOverride指令来设置。
第四步:安装OwnCloud——安装运行。
在浏览器中打开 http://localhost/ludcloud ,你会被引导进入ownCloud的安装界面。
首先你要建立一个管理员帐号,输入必填的用户名和密码就完成了。为了配置数据库,点“Advanced” 选择MySQL,然后输入MySQL的数据库名、用户名和密码。
点“Finish” 完成安装过程。

❷ Android - 文件系统与Android11 分区存储

Android文件系统分为 内部存储(internal storage) 外部存储(external storage)

1.1 用一个表格来直观对比一下两者:

1.2 应用的私有路径

应用在安装之后,系统会自动在内部存储和外部存储,分别建立应用的私有存储区域。

内部存储 : data/user/0/packageName
外部存储 : storage/emulated/0/android/data/packageName

当应用卸载或者清除数据后,该区域文件会被删除。

1.3 内外部存储图解

Android 10版本中,Google推出 分区存储 (scoped storage)的功能。

背景
分区存储功能是针对内置的外部存储来说的,很多应用喜欢在外部存储的根目录创建自己的文件夹,比如:storage/emulated/0/***

这样做的好处:1. 当不断向该目录存储时,应用自己的容量不会变化; 2. 当应用卸载时,该目录下文件不会被删除,可用于保存一些可持久性的文件。

但是也有坏处: 1. 对用户来说,会有很多垃圾文件存在于手机中;2. 只要获取到Read 和 Write权限,就可以随意访问外部存储的任何目录,信息安全存在隐患。

分区存储

除了应用的私有目录和公共目录,其他位置都称为 旧版存储位置 ,我们需要将旧版存储位置的数据迁移到能兼容分区存储的位置。

❸ Android数据存储之File总结

在使用File存储App数据时,我们需要了解Android系统的存储系统。Android的存储分为内部存储和外部存储。

由于Android系统的厂商比较多,对于外部存储目录的定义有所不同,可能在根目录下的mnt,sdcard和storage下。以storage为例,打开emulated/0目录,外部存储目录就出现了。虽然可以通过多种路径打开外部存储文件,但是最终他们的路径是相同的:

mnt:

storage:

sdcard:

外部存储目录下包含两大类:公有目录和私有目录

私有目录:

对比下来External有以下几点优点:

缺点:

内部存储与外部存储权限申请对比如下:

首先我们要获取外部存储目标文件的路径:

然后确定自己需要创建的文件名,结合上面的到的路径,创建一个File对象:

Android系统默认数据清理的路径是,内部存储目录中相应的cache文件夹中的文件和外部存储中相应的cache文件夹中的文件。

你的app的internal storage 目录是以你的app的包名作为标识存放在Android文件系统的特定目录下[data/data/com.example.xx]。 从技术上讲,如果你设置文件为可读的,那么其他app就可以读取你的internal文件。然而,其他app需要知道你的包名与文件名。若是你没有设置为可读或者可写,其他app是没有办法读写的。因此只要你使用MODE_PRIVATE ,那么这些文件就不可能被其他app所访问。

另外记住一点,内部存储在你的APP卸载的时候,会一块被删除,因此,我们可以在cache目录里面放置我们的图片缓存,而且cache与files的差别在于,如果手机的内部存储空间不够了,会自行选择cache目录进行删除,因此,不要把重要的文件放在cache文件里面,可以放置在files里面,因为这个文件只有在APP被卸载的时候才会被删除。还有要注意的一点是,如果应用程序是更新操作,内部存储不会被删除,区别于被用户手动卸载。

不管你是使用 () 来存储可以共享的文件,还是使用 getExternalFilesDir() 来储存那些对于你的app来说是私有的文件,有一点很重要,那就是你要使用那些类似DIRECTORY_PICTURES 的API的常量。那些目录类型参数可以确保那些文件被系统正确的对待。例如,那些以DIRECTORY_RINGTONES 类型保存的文件就会被系统的media scanner认为是ringtone而不是音乐。

在开发中,不建议往内部存储中写太多的数据,毕竟空间有限。外部存储在使用的时候最好能够将文件存放在私有目录下,这样有利于系统维护,也避免用户的反感。

彻底理解android中的内部存储与外部存储

Android存储挖坑记

缓存文件可以放在哪里?它们各自的特点是什么

❹ Android存储及路径

分为:内部存储和外部存储

如何区分内部存储和外部存储:可以从物理和逻辑区分

从物理的角度区分,内部存储就是手机自带存储空间,外部存储就是外部接入的存储空间例如SD卡

从逻辑意义上区分,data,system 目录就是手机的内部存储,而 mnt 或者 storage目录下的sdcard0指向的sdcard目录就是外部存储。如果是手机自带的外部存储被称为机身外部存储,外置的SD卡则称之为外部存储。当然两者都称为外部存储也没关系。这里描述的内部存储和机身外部存储都属于机身存储;

逻辑区分是从4.4以上版本开始的;

获取内部存储路径和api对应关系

1,通过Environment

2,通过上下文Context

Build.VERSION_CODES.LOLLIPOP及以上版本新增的API

Build.VERSION_CODES.N及以上版本新增的API

特点:

1、内部存储路径中的文件是分类存储的,我们无法干涉,除了cache目录,别的目录系统不会自动创建

2、除了files目录,别的目录我们几乎都是无法手动操作的

3、别的App几乎无法访问内部存储中的数据,除了用非法手段或者我们主动暴露

4、内部存储目录下的文件夹及文件会随着app的卸载而被系统自动删除

外部存储又可分为共有目录和私有目录;

私有目录

私有目录:不需要访问权限

Android 在外部存储空间中也提供了特殊目录供App存放私有文件,该路径为:/storage/emulated/0/Android/data/包名/

注意:应用安装之后/storage/emulated/0/Android/data/是没有对应的应用文件夹的,需要手动调用对应的API创建;

获取私有目录路径

共有目录

共有目录:需要申请权限才能访问

权限:6.0以上需要动态申请

获取共有目录的API 29中已过时:

❺ Android外部存储ExternalStorage

内存(emory)

内部存储(ternalStorage)

1)storage或者mnt文件夹下

2) 通过:

Environment.getExternalStorageDirectory()

可以看到外部存储的位置

3) 公有目录(DCIM、DOWNLOAD等),要使用需要申请权限。

4) 私有目录(Android/data/应用包名),只能被当前应用访问。

String path= Environment.getExternalStorageDirectory().getAbsolutePath() +"/Mytest.txt";

try {

if (!file.exists()) {

file.createNewFile();

    }

}catch (IOException e) {

e.printStackTrace();

}

try {

if (!file.exists()) {

file.createNewFile();

    }

FileOutputStream fos=new FileOutputStream(path,true);

    String str=infoEdt.getText().toString();

    fos.write(str.getBytes());//以字节流的方式写入

}catch (IOException e) {

e.printStackTrace();

}

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

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

其中第二条权限可能会报错,这时候解决办法是:

在报错的地方添加

tools:ignore="ProtectedPermissions"

同时在manifest标签里添加;

 xmlns:tools="http://schemas.android.com/tools"

FileInputStream fis =new FileInputStream(path);     

byte[] b =new byte[1024];

int len = fis.read(b);//读取fis字节流,将其存储在字节数组b中,并返回数组的长度(字节的个数)

String str2=new String(b,0,len);

txt.setText(str2);

注意:1、从外部存储读取文件不需要权限

           2、Android6.0以上对外部存储(内存卡)共有目录的读写需要运行时权限(允许访问内存卡),这个权限需要用户手动开启,只在AndroidManifest.xml中申请是没用的。

int permissionContextCompet.checkSelfPermission(context,permission)  检查是否具有权限

第一个参数,环境上下文(this),第二个参数,权限名,Manifest.permission.WRITE_EXTERNAL_STORAGE,返回的是一个int类型的变量,将其与PackageManger.PERMISSION_GRANTED比较,等于则说明有权限,不等于的话则要动态申请权限:

if(permission!= PackageManager.PERMISSION_GRANTED){

//没有权限,则要申请权限

}

ActivityCompet.reaquestPermissions(activity,permission,code) 请求权限,第一个参数:activity 第二个参数:String类型的数组,里面装了各种权限, 当有多项权限需要申请的时候可以一起申请,第三个参数:一个int类型的请求码,动态申请权限的时候会触发onRequestPermissionsResult()方法,如果在申请的过程中有什么需要做的操作可以定义在该方法中,第三个参数请求吗可以帮助知道是那个权限的申请触发了这个方法

int permission=ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE);

    if(permission!= PackageManager.PERMISSION_GRANTED){

        ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},1);

    }

}

@Override

public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {

super.onRequestPermissionsResult(requestCode, permissions, grantResults);

    if(requestCode==1){

//当前没有什么要处理的

    }

}

通过:Environment.getExternalStorageDirectory()获取到的是根目录,通过在后面拼接目录名称,可以访问到公有目录

要获取外部存储目录的私有目录,可以通过:

1)Context.getExternalFilesDir(String type)获取到SDCard/Android/data/包名/files/目录,这个目录下一般存放一些需要长时间保存的数据。这个参数是用于指定文件夹类型的(图片,音乐,视频...)。

2)Context。getExternalCacheDir()获取到SDCard/Android/data/包名/cache/目录,这个目录下面一般存放一些临时的缓存性的数据。

❻ 安卓的存储机制

安卓的文件存储分为内部存储和外部存储,在安卓早期,手机内置存储很小,都是用于应用的私有存储空间,外部存储就是sdcard。往后发展,手机的内置存储越来越大,同时也出现了一些不支持sdcard的手机。如今安卓的外部存储已经不限于sdcard了。

内部存储

手机内部存储除了放置应用的私有和系统空间以外都为外部存储,内部存储空间有限。对于设备中每一个安装的 App,系统都会在内部存储空间的 data/data 目录下以应用包名为名字自动创建与之对应的文件夹。这个文件夹用于 App 中的 WebView 缓存页面信息,SharedPreferences 和 SQLiteDatabase 持久化应用相关数据等。

内部存储包含的文件

外部存储

在安卓文件的外部存储部分又分为了应用的私有目录和共有目录。

私有目录

外部的存储的私有目录地址可以根据context的相应方法得到。

公共目录

外部的存储的公有目录可以根据Environment的相应方法得到。

创建文件测试

通过file创建data文件

Test 1

Filefile = newFile("data");

try{

//新建文件

booleanbl=file.createNewFile();

//判断文件创建是否成功

Log.d("myTag","onCreate:"+bl);

}catch(IOExceptione){

e.printStackTrace();

}

运行结果

文件创建失败

同时文件夹中没有出现该文件

猜测创建失败问题来自文件地址的问题

Test 2

Filefile=null;

file=newFile(getCacheDir()+"data");

try{

//新建文件

booleanbl=file.createNewFile();

//判断文件创建是否成功

Log.d("myTag","onCreate:"+bl);

}catch(IOExceptione){

e.printStackTrace();

}

运行结果

文件创建成功,同时在/data/data/com.example.myapplication的地址处生成了名为cachedata的文件

文件名与预期不同

Test 3

Filefile=null;

file=newFile(getFilesDir()+"data");

try{

//新建文件

booleanbl=file.createNewFile();

//判断文件创建是否成功

Log.d("myTag","onCreate:"+bl);

}catch(IOExceptione){

e.printStackTrace();

}

运行结果

创建了一个files文件夹及一个filesdata文件

filesdata文件位置:/data/data/com.example.myapplication/filesdata

Test 4

Filefile=null;

file=newFile(getCodeCacheDir()+"data");

try{

//新建文件

booleanbl=file.createNewFile();

//判断文件创建是否成功

Log.d("myTag","onCreate:"+bl);

}catch(IOExceptione){

e.printStackTrace();

}

运行结果

code_cachedata地址:/data/data/com.example.myapplication/code_cachedata

Test 5

Filefile=null;

file=newFile(getCacheDir().getPath(),"data");

try{

//新建文件

booleanbl=file.createNewFile();

//判断文件创建是否成功

Log.d("myTag","onCreate:"+bl);

}catch(IOExceptione){

e.printStackTrace();

}

运行结果

成功在cache文件下创建data文件

总结使用file类创建文件时需要详细的地址,这里的地址可以通过context的getcacheDir()等方法得到

使用openFileinputStream创建

FileInputStreaminputStream=null;

try{

inputStream=openFileInput("data");

}catch(FileNotFoundExceptione){

e.printStackTrace();

}finally{

try{

inputStream.close();

}catch(IOExceptione){

e.printStackTrace();

}

新建了一个文件夹而没有新建文件

将输入流改为输出流后

FileOutputStreamoutputStream=null;

try{

outputStream=openFileOutput("data",MODE_PRIVATE);

}catch(FileNotFoundExceptione){

e.printStackTrace();

}finally{

try{

outputStream.close();

}catch(IOExceptione){

e.printStackTrace();

}

成功创建文件

使用openfilexxxxstream在只输入文件名进行创建文件时会默认在data/data/包名/files处创建文件,若不存在files文件则会新建一个files文件

File file = new File();

方法会读取该文件地址的文件,如果没有也不会报错。

file.createNewFile();

会向该地址创建一个文件,返回一个bool值以判断是否创建成功

openFileInputstream/openFileOutputstream都只能操作data/data/包名 处的文件

Tast 6

Filefile;

file=newFile(getExternalCacheDir(),"data");

try{

booleanbl=file.createNewFile();

Log.d("myTag","onCreate:"+bl);

}catch(IOExceptione){

e.printStackTrace();

}

需要读写公共空间操作有所区别

Filefile;

file=Environment.(Environment.DIRECTORY_DOWNLOADS);

FilemFile;

mFile=newFile(file,"data");

try{

booleanbl=mFile.createNewFile();

Log.d("myTag","onCreate:"+bl);

}catch(IOExceptione){

e.printStackTrace();

}

需要申明读写权限对于android6.0以上还需要动态申请权限

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

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

最后附上安卓所有文件存储的地址的获取方法

热点内容
什么样的配置能玩地平线4 发布:2025-01-31 22:44:05 浏览:241
python正则表达式符号 发布:2025-01-31 22:43:50 浏览:391
androidmime 发布:2025-01-31 22:34:44 浏览:782
ftp和http的中文含义是 发布:2025-01-31 22:33:48 浏览:402
sqlite3存储图片 发布:2025-01-31 22:27:14 浏览:162
sqlserverphp 发布:2025-01-31 22:22:55 浏览:877
曲马多存储 发布:2025-01-31 22:22:52 浏览:538
缓存儿歌 发布:2025-01-31 22:21:26 浏览:528
学java有发展吗 发布:2025-01-31 21:44:45 浏览:569
HBX编程 发布:2025-01-31 21:39:26 浏览:161