精华内容
下载资源
问答
  • 如果用户从系统文件资源管理器中选择sd卡文件夹,那么我有SD卡写访问权限.Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);intent.putExtra("android.content.extra.SHOW_ADVANCED", true);...

    在我的应用程序中,我使用以下意图获得SD卡写入权限.如果用户从系统文件资源管理器中选择sd卡文件夹,那么我有SD卡写访问权限.

    Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);

    intent.putExtra("android.content.extra.SHOW_ADVANCED", true);

    startActivityForResult(intent, 42);

    之后,我可以使用DocumentFile类修改SD卡中的文件.但我在获取随机文件路径的DocumentFile时遇到问题.

    Document.fromFile(new File(path));

    Document.fromSingleUri(Uri.fromFile(new File(path)));

    两者都返回一个DocumentFile对象,该对象在.canWrite()上返回false.即使我已经获得SD卡许可.

    所以我编写了在我的问题末尾发布的方法,以获得一个在.ca​​nWrite()上返回true的DocumentFile.但这很慢……而且感觉非常错误!必须有更好的方法来做到这一点.我还写了一个返回相同字符串的方法

    String docFileUriString = docFile.getUri().toString();

    对于任何文件,其中docFile是由下面的方法返回的DocumentFile.但

    DocumentFile.fromTreeUri(Uri.parse(docFileUriString ));

    返回一个DocumentFile,它指向sd卡的根,而不是DocumentFile路径.这很奇怪.有人可以提出更优雅的解决方案吗?

    public static DocumentFile getDocumentFileIfAllowedToWrite(File file, Context con){

    List permissionUris = con.getContentResolver().getPersistedUriPermissions();

    for(UriPermission permissionUri:permissionUris){

    Uri treeUri = permissionUri.getUri();

    DocumentFile rootDocFile = DocumentFile.fromTreeUri(con, treeUri);

    String rootDocFilePath = FileUtil.getFullPathFromTreeUri(treeUri, con);

    if(file.getAbsolutePath().startsWith(rootDocFilePath)){

    ArrayList pathInRootDocParts = new ArrayList();

    while(!rootDocFilePath.equals(file.getAbsolutePath())){

    pathInRootDocParts.add(file.getName());

    file = file.getParentFile();

    }

    DocumentFile docFile = null;

    if(pathInRootDocParts.size()==0){

    docFile = DocumentFile.fromTreeUri(con, rootDocFile.getUri());

    }

    else{

    for(int i=pathInRootDocParts.size()-1;i>=0;i--){

    if(docFile==null){docFile = rootDocFile.findFile(pathInRootDocParts.get(i));}

    else{docFile = docFile.findFile(pathInRootDocParts.get(i)); }

    }

    }

    if(docFile!=null && docFile.canWrite()){

    return docFile;

    }else{

    return null;

    }

    }

    }

    return null;

    }

    展开全文
  • 如果用户从系统文件资源管理器中选择sd卡文件夹,那么我有SD卡写访问权限 .Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);intent.putExtra("android.content.extra.SHOW_ADVANCED", true);...

    在我的应用程序中,我使用以下意图获得SD卡写入权限 . 如果用户从系统文件资源管理器中选择sd卡文件夹,那么我有SD卡写访问权限 .

    Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);

    intent.putExtra("android.content.extra.SHOW_ADVANCED", true);

    startActivityForResult(intent, 42);

    之后,我可以使用DocumentFile类修改SD卡中的文件 . 但我在获取随机文件路径的DocumentFile时遇到问题 .

    Document.fromFile(new File(path));

    Document.fromSingleUri(Uri.fromFile(new File(path)));

    两者都返回一个DocumentFile对象,该对象在.canWrite()上返回false . 即使我已经获得SD卡许可 .

    所以我编写了在我的问题末尾发布的方法,以获得一个在.canWrite()上返回true的DocumentFile . 但这很慢......而且感觉非常错误!必须有更好的方法来做到这一点 . 我还写了一个返回相同字符串的方法

    String docFileUriString = docFile.getUri().toString();

    对于任何文件,其中docFile是由下面的方法返回的DocumentFile . 但

    DocumentFile.fromTreeUri(Uri.parse(docFileUriString ));

    返回一个DocumentFile,它指向sd卡的根,而不是DocumentFile路径 . 这很奇怪 . 有人可以提出更优雅的解决方案吗?

    public static DocumentFile getDocumentFileIfAllowedToWrite(File file, Context con){

    List permissionUris = con.getContentResolver().getPersistedUriPermissions();

    for(UriPermission permissionUri:permissionUris){

    Uri treeUri = permissionUri.getUri();

    DocumentFile rootDocFile = DocumentFile.fromTreeUri(con, treeUri);

    String rootDocFilePath = FileUtil.getFullPathFromTreeUri(treeUri, con);

    if(file.getAbsolutePath().startsWith(rootDocFilePath)){

    ArrayList pathInRootDocParts = new ArrayList();

    while(!rootDocFilePath.equals(file.getAbsolutePath())){

    pathInRootDocParts.add(file.getName());

    file = file.getParentFile();

    }

    DocumentFile docFile = null;

    if(pathInRootDocParts.size()==0){

    docFile = DocumentFile.fromTreeUri(con, rootDocFile.getUri());

    }

    else{

    for(int i=pathInRootDocParts.size()-1;i>=0;i--){

    if(docFile==null){docFile = rootDocFile.findFile(pathInRootDocParts.get(i));}

    else{docFile = docFile.findFile(pathInRootDocParts.get(i)); }

    }

    }

    if(docFile!=null && docFile.canWrite()){

    return docFile;

    }else{

    return null;

    }

    }

    }

    return null;

    }

    展开全文
  • 打开Document UI 过滤图片private voidstartAcitivty() {Intent intent= newIntent();intent.setAction("android.intent.action.GET_CONTENT");intent.setType("image/*");startActivityForResult(intent,1001);}@...

    打开Document UI 过滤图片

    private voidstartAcitivty() {

    Intent intent= newIntent();

    intent.setAction("android.intent.action.GET_CONTENT");

    intent.setType("image/*");

    startActivityForResult(intent,1001);

    }

    @Overrideprotected void onActivityResult(int req, intres, Intent intent) {

    Log.d("onActivityResult","1:" +req);

    Log.d("onActivityResult","2:" +res);

    Log.d("onActivityResult","3:" +intent);if (intent != null) {

    String data=intent.getDataString();try{

    Log.d("onActivityResult","4:" + URLDecoder.decode(data, "UTF-8"));

    queryImage(URLDecoder.decode(data,"UTF-8"));

    }catch(UnsupportedEncodingException e) {

    e.printStackTrace();

    }

    }

    }

    能够得到图片content uri

    下面处理图片数据 得到图片PATH

    private voidqueryImage(String data) {

    String _path="_data";

    String _album="bucket_display_name";int idx = data.lastIndexOf(":");

    String id= null;if (idx != -1) {

    id= data.substring(idx + 1);

    }

    Log.d("onActivityResult","id:" +id);

    Cursor cursor= getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, "_id=" + id, null, null);if(cursor.moveToFirst()) {

    String path=cursor.getString(cursor.getColumnIndex(_path));

    String album=cursor.getString(cursor.getColumnIndex(_album));

    Log.d("onActivityResult","path:" + path + "," +album);

    File f= newFile(path);if(f.exists()) {

    Bitmap b=BitmapFactory.decodeFile(path);

    imageView.setImageBitmap(b);

    }

    }

    cursor.close();

    }

    不同手机的文档选择器界面都有所不同。

    START u0 {act=android.intent.action.GET_CONTENT typ=image/* cmp=com.android.documentsui/.DocumentsActivity (has extras)} from pid 11910

    d83df56760a09101c46e178748935c17.png

    原文:http://www.cnblogs.com/gaofengworking/p/4941832.html

    展开全文
  • android文件流使用

    2021-06-04 03:30:25
    image.png文件流JAVA中针对文件的读写操作设置了一系列的流,其中主要FileInputStream,FileOutputStream,FileReader,FileWriter四种最为常用的流。FileInputStreamFileInputStream流被称为文件字节输入流,意思指对...

    5c3cde070301

    image.png

    文件流

    JAVA中针对文件的读写操作设置了一系列的流,其中主要FileInputStream,FileOutputStream,FileReader,FileWriter四种最为常用的流。

    FileInputStream

    FileInputStream流被称为文件字节输入流,意思指对文件数据以字节的形式进行读取操作如读取图片视频等。

    实例代码:

    /**

    *

    * 运行会产生异常并被扑捉--因为不存在xxxxxxxx这样的文件

    */

    public static void main(String[] args)

    {

    File file=new File("xxxxxxxx"); //根据路径创建File类对象--这里路径即使错误也不会报错,因为只是产生File对象,还并未与计算机文件读写有关联

    try

    {

    FileInputStream fileInputStream=new FileInputStream(file);//与根据File类对象的所代表的实际文件建立链接创建fileInputStream对象

    }

    catch (FileNotFoundException e)

    {

    System.out.println("文件不存在或者文件不可读或者文件是目录");

    }

    实战代码

    package com.mkyong.io;

    import java.io.File;

    import java.io.FileInputStream;

    import java.io.IOException;

    public class ReadFileExample {

    public static void main(String[] args) {

    File file = new File("C:/robots.txt");

    FileInputStream fis = null;

    try {

    fis = new FileInputStream(file);

    System.out.println("Total file size to read (in bytes) : "

    + fis.available());

    int content;

    while ((content = fis.read()) != -1) {

    // convert to char and display it

    System.out.print((char) content);

    }

    } catch (IOException e) {

    e.printStackTrace();

    } finally {

    try {

    if (fis != null)

    fis.close();

    } catch (IOException ex) {

    ex.printStackTrace();

    }

    }

    }

    }

    展开全文
  • } /** * 专为Android4.4设计的从Uri获取文件绝对路径,以前的方法已不好使 */ @SuppressLint("NewApi") private StringgetPath(final Context context, final Uri uri) { final boolean isKitKat = Build.VERSION....
  • 使用intent 跳转系统文件管理器到 android/data 并同意你的应用访问这个文件夹 这里是代码 Uri uri1 = Uri.parse("content://com.android.externalstorage.documents/tree/primary%3AAndroid%2Fdata"); Intent ...
  • intent.putExtra("android.content.extra.SHOW_ADVANCED", true); startActivityForResult(intent, 42); After that I am able to modify files in th sd card using the DocumentFile class. But I'm having ...
  • 实际项目中经常需要调用文件管理器,选择下载路径或者上传的本地文件路径。今天就给大家做个demo示范该功能的实现过程。一、实现效果预览以下为三星S6的样机测试效果,当然不同手机调用后的...import android.anno...
  • Android原生文件分享

    2021-06-08 04:53:48
    创建分享创建Intent并指定Action为Intent.ACTION_SEND。val shareIntent = Intent...//传输文件 采用流的方式intent.putExtra(Intent.EXTRA_STREAM,Uri.fromFile(File(fileUrl))intent.type = "*/*"发送隐式意图,...
  • Android 使用与其他平台上基于磁盘的文件系统类似的文件系统。本文讲述如何使用 Android 文件系统通过 File API 读取和写入文件。File 对象适合按照从开始到结束的顺序不跳过地读取或写入大量数据。 例如,它适合于...
  • 一、动态权限申请、 二、MediaStore 操作文件、 三、完整代码示例、 1、MainActivity 核心代码、 2、build.gradle 构建脚本、 3、清单文件、 五、相关文档资料、
  • 自从年初搞了一部移动签约的android手机,没装几个App,现在经常报“空间不足”,删了很多App也不见好: 因为自始至终我对Android系统里面的文件和文件夹都感觉挺神秘的,所以想一探究竟,搞清楚其中的奥秘,于是...
  • //首先,调用选择器获取文件夹urival PICK_FILE = 10//打开文件选择器,选择文件夹private fun pickFile() {val intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE)startActivityForResult(intent, PICK_FILE)}//...
  • 要选择文件项,我要编写以下代码(我使用的是Kotlin,在Java中是同样的问题):fun goToDocumentPicker() {val intent = Intent(Intent.ACTION_OPEN_DOCUMENT)intent.addCategory(Intent.CATEGORY_OPENABLE)inte...
  • 如果您的内容Uri带有content://com.externalstorage...,则可以使用此方法获取Android 19或更高版本上的文件夹或文件的绝对路径。public static String getPath(final Context context, final Uri uri) {final ...
  • 具体使用见作者使用文档,地址如下:GitHub - getActivity/XXPermissions: Android 权限请求框架,已适配 Android 11 2,遍历公共目录,查出一张图片,并记录下来 这里使用的是MediaStoreAPI,通过遍历拿到第一张...
  • 安卓10.0文件操作

    2021-02-19 13:20:25
    /** * * app文件分为专属文件和独立文件; * 手机存储分内部存储(手机存储,如4G,8G内存) 和外部存储(SD拓展卡,如64G,128G) * 专属文件是那些只有该app才可以使用的文件,例如数据库,...* 在安卓10.0之后不建议...
  • 其他页面 Intent intent = new Intent(CategoryActivity.this, MainActivity....文件列表页面 Intent intent = getIntent(); path = intent.getStringExtra("Path"); if (path == null) path = "/"; genList(pat.
  • 一、Android端实现文件上传1)、新建一个Android项目命名为androidUpload,目录结构如下:2)、新建FormFile类,用来封装文件信息package com.ljq.utils;import java.io.File;import java.io.File...
  • 可以获得文件夹中所有文件的路径及文件名。代码很简单,直接上车,车上再解释:/*** 获取指定目录内所有文件路径* @param dirPath 需要查询的文件目录* @param _type 查询类型,比如mp3什么的*/public static ...
  • Android端实现文件上传1)、新建一个Android项目命名为androidUpload,目录结构如下:2)、新建FormFile类,用来封装文件信息package com.ljq.utils;import java.io.File;import java.io.FileInputStream;import java....
  • android 创建 xml文件

    2021-06-02 23:27:39
    android创建xml文件的方法。要操作android的外部存储,所以要在AndroidManifest.xml文件中添加权限。首先要创建一个XmlSerialize对象。并创建一个文件,并打开获得输出流。使用XmlSerilaize中的操作方法向输出流中...
  • 我有下面的代码,让用户从那里设备选择一个pdf文件,但是目前看来传递的URI路径不是绝对的 .public void openPDF(int type){Intent intent = new Intent();intent.setType("application/pdf");intent.setAction...
  • 在我的应用程序中,我从资产资源获取文件并从中打开pdf文件。我正在使用此代码:Uri path = Uri.parse("file:///android_asset/WindsorONE_Mobile_PK.pdf");Intent intentPDF = new Intent(Intent.ACTION_VIEW);...
  • Android 10,11 文件存储

    千次阅读 2021-03-03 15:12:14
    此版本引入了多项增强功能,例如,可主动选择启用的媒体原始文件路径访问机制、面向媒体的批量编辑操作,以及存储访问框架的界面更新。 此版本还改进了分区存储,以便开发者更轻松地迁移到此存储模型。如需了解详情...
  • Android 选择文件返回路径怎么就这么难? 这个问题纠结了我很长时间,终于有了比较好的解决方案。目前已知适配所有的机型,有问题就留言吧。 正确姿势来一遍 1. 打开系统自带的文件浏览器并限制类型 public void ...
  • 权限配置 ...uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 然后再确认
  • 文件不能太大否则会报内存溢出import java.io.FileInputStream;import org.apache.http.util.EncodingUtils;import android.app.Activity;import android.os.Bundle;import android.widget.TextView;public class ...
  • 我试图在我的Android项目中实现文件选择器.我迄今所能做的是:Intent chooseFile;Intent intent;chooseFile = new Intent(Intent.ACTION_GET_CONTENT);chooseFile.setType("*/*");intent = Intent.createChooser...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 47,979
精华内容 19,191
关键字:

安卓document文件