当我使用此方法时,我得到0值。我的问题在于我如何创建文件。我希望能够通过Intent.ACTION_GET_CONTENT使用Uri选择文件。我认为我正在创建错误的文件,但这不能完全用于本地文件或驱动器文件。如果有人能够解释如何解决从文件中获取信息的问题,而不依赖于文件的来源,那就是我想要做的事情。
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)的uri的意图
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);
}
}
}
答案 0 :(得分:2)
我希望能够通过Intent.ACTION_GET_CONTENT使用Uri选择文件
A Uri
is not a file,不仅仅是HTTP网址。使用ContentResolver
和openInputStream()
来读取与您从Uri
获得的ACTION_GET_CONTENT
相关联的信息流。