Android:如何以字节读取文件?

我正在尝试在Android应用程序中获取以字节为单位的文件内容。 我已经得到SD卡中的文件,现在想获得所选文件的字节数。 我GOOGLE了,但没有这样的成功。 请帮忙

以下是获取扩展名的文件的代码。 通过这个我得到的文件,并显示在微调。 在文件select我想获得文件的字节数。

private List<String> getListOfFiles(String path) { File files = new File(path); FileFilter filter = new FileFilter() { private final List<String> exts = Arrays.asList("jpeg", "jpg", "png", "bmp", "gif","mp3"); public boolean accept(File pathname) { String ext; String path = pathname.getPath(); ext = path.substring(path.lastIndexOf(".") + 1); return exts.contains(ext); } }; final File [] filesFound = files.listFiles(filter); List<String> list = new ArrayList<String>(); if (filesFound != null && filesFound.length > 0) { for (File file : filesFound) { list.add(file.getName()); } } return list; } 

这里很简单:

 File file = new File(path); int size = (int) file.length(); byte[] bytes = new byte[size]; try { BufferedInputStream buf = new BufferedInputStream(new FileInputStream(file)); buf.read(bytes, 0, bytes.length); buf.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } 

在manifest.xml中添加权限:

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

这是一个解决scheme,保证整个文件将被读取,这不需要库,是有效的:

 byte[] fullyReadFileToBytes(File f) throws IOException { int size = (int) f.length(); byte bytes[] = new byte[size]; byte tmpBuff[] = new byte[size]; FileInputStream fis= new FileInputStream(f);; try { int read = fis.read(bytes, 0, size); if (read < size) { int remain = size - read; while (remain > 0) { read = fis.read(tmpBuff, 0, remain); System.arraycopy(tmpBuff, 0, bytes, size - remain, read); remain -= read; } } } catch (IOException e){ throw e; } finally { fis.close(); } return bytes; } 

注:它假定文件大小小于MAX_INT字节,你可以添加处理,如果你想。

目前最简单的解决scheme是使用Apache常见的io:

http://commons.apache.org/proper/commons-io/javadocs/api-release/org/apache/commons/io/FileUtils.html#readFileToByteArray(java.io.File&#xFF09;

 byte bytes[] = FileUtils.readFileToByteArray(photoFile) 

唯一的缺点是在build.gradle应用程序中添加这个依赖:

 compile 'commons-io:commons-io:2.4' 

+ 1562方法计数

由于接受的BufferedInputStream#read不能保证读取所有内容,而不是自己跟踪缓冲区大小,所以我使用了这种方法:

  byte bytes[] = new byte[(int) file.length()]; BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file)); DataInputStream dis = new DataInputStream(bis); dis.readFully(bytes); 

阻止直到完整的读取完成,并且不需要额外的导入。

你也可以这样做:

 byte[] getBytes (File file) { FileInputStream input = null; if (file.exists()) try { input = new FileInputStream (file); int len = (int) file.length(); byte[] data = new byte[len]; int count, total = 0; while ((count = input.read (data, total, len - total)) > 0) total += count; return data; } catch (Exception ex) { ex.printStackTrace(); } finally { if (input != null) try { input.close(); } catch (Exception ex) { ex.printStackTrace(); } } return null; } 

一个简单的InputStream会做

 byte[] fileToBytes(File file){ byte[] bytes = new byte[0]; try(FileInputStream inputStream = new FileInputStream(file)) { bytes = new byte[inputStream.available()]; //noinspection ResultOfMethodCallIgnored inputStream.read(bytes); } catch (IOException e) { e.printStackTrace(); } return bytes; }