Android 从Uri(本地、dropbox、驱动器等)获取文件数据
使用此方法时,我得到的值为0。我认为问题在于如何创建文件。我希望能够通过Intent.ACTION\u GET\u CONTENT使用Uri来选择文件。我认为我创建的文件是错误的,但这对本地文件或驱动器文件不完全有效。如果有人能解释如何解决从不依赖于文件来源的文件中获取信息的问题,这就是我正在寻找的方法Android 从Uri(本地、dropbox、驱动器等)获取文件数据,android,file,android-intent,uri,file-conversion,Android,File,Android Intent,Uri,File Conversion,使用此方法时,我得到的值为0。我认为问题在于如何创建文件。我希望能够通过Intent.ACTION\u GET\u CONTENT使用Uri来选择文件。我认为我创建的文件是错误的,但这对本地文件或驱动器文件不完全有效。如果有人能解释如何解决从不依赖于文件来源的文件中获取信息的问题,这就是我正在寻找的方法 private FileData getFileDataFromUri(Uri uri){ //get file from uri File file =
private FileData getFileDataFromUri(Uri uri){
//get file from uri
File file = new File(uri.getPath());
//initialize variables
FileData thisFileData = new FileData();
thisFileData.sizeInBytes = (int) file.length();
thisFileData.fileName = file.getName();
thisFileData.path = file.getPath();
byte[] bytes = new byte[thisFileData.sizeInBytes];
//get all bytes of file
try {
BufferedInputStream buffer = new BufferedInputStream(new FileInputStream(file));
buffer.read(bytes, 0,bytes.length);
buffer.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
Log.e("getBinaryDataFromUri", e+"");
thisFileData.errorCode = 1;
return thisFileData;
} catch (IOException e) {
e.printStackTrace();
Log.e("getBinaryDataFromUri", e+"");
thisFileData.errorCode = 1;
return thisFileData;
}
//convert bytes array to string
thisFileData.bytes = new String(bytes);
//return
return thisFileData;
}
fileData类只是文件中的信息,我需要用它做很多事情,下面是它的内容:
public class FileData {
int errorCode = 0;
int sizeInBytes = 0;
String fileName = "";
String bytes = "";
String path = "";
}
我最初调用的目的是获取发送给函数getFileDataFromUri(uri)的uri
我希望能够通过Intent.ACTION\u GET\u CONTENT使用Uri选择文件
,而不是HTTP URL。使用
ContentResolver
和openInputStream()
读取与Uri
相关联的流,您可以从ACTION\u get\u CONTENT
获得该流,感谢您现在查看它。看起来很有希望,但是有很多代码是正确的。
public void selectDocument() {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT), chooser = null;
intent.setType("*/*"); //iOS uses "application/octet-stream"
chooser = Intent.createChooser(intent, "Find file...");
startActivityForResult(chooser, PICK_FILE_REQUEST);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == PICK_FILE_REQUEST){
if(resultCode == Activity.RESULT_OK){
Uri fullUri = data.getData();
selectPrinter(fullUri);
}
}
}