java byte【】数组与文件读写
此文全文参考http://blog.csdn.net/sniffer_wang/article/details/7455701,自己加以改进应用,谢了
1 import java.io.ByteArrayOutputStream; 2 import java.io.File; 3 import java.io.FileInputStream; 4 import java.io.FileOutputStream; 5 import java.io.IOException; 6 7 public class FileHelper { 8 //第一种获取文件内容方式 9 public byte[] getContent(String filePath) throws IOException { 10 File file = new File(filePath); 11 12 long fileSize = file.length(); 13 if (fileSize > Integer.MAX_VALUE) { 14 System.out.println("file too big..."); 15 return null; 16 } 17 18 FileInputStream fi = new FileInputStream(file); 19 20 byte[] buffer = new byte[(int) fileSize]; 21 22 int offset = 0; 23 24 int numRead = 0; 25 26 while (offset < buffer.length 27 28 && (numRead = fi.read(buffer, offset, buffer.length - offset)) >= 0) { 29 30 offset += numRead; 31 32 } 33 34 // 确保所有数据均被读取 35 36 if (offset != buffer.length) { 37 38 throw new IOException("Could not completely read file "+ file.getName()); 39 40 } 41 42 fi.close(); 43 44 return buffer; 45 } 46 47 //第二种获取文件内容方式 48 public byte[] getContent2(String filePath) throws IOException 49 { 50 FileInputStream in=new FileInputStream(filePath); 51 52 ByteArrayOutputStream out=new ByteArrayOutputStream(1024); 53 54 System.out.println("bytes available:"+in.available()); 55 56 byte[] temp=new byte[1024]; 57 58 int size=0; 59 60 while((size=in.read(temp))!=-1) 61 { 62 out.write(temp,0,size); 63 } 64 65 in.close(); 66 67 byte[] bytes=out.toByteArray(); 68 System.out.println("bytes size got is:"+bytes.length); 69 70 return bytes; 71 } 72 //将byte数组写入文件 73 public void createFile(String path, byte[] content) throws IOException { 74 75 FileOutputStream fos = new FileOutputStream(path); 76 77 fos.write(content); 78 fos.close(); 79 } 80 81 }
将一个文件内的所有内容读取到byte数组,也可以把一个byte[]的内容写入到文件中。可以作为复制文件的方法
应用:
import java.io.IOException; public class byteRW { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub byte[] buf =new byte[1024]; FileHelper filehelper = new FileHelper(); try { //第一种获取文件内容方式,读取文件到字节数组 buf =filehelper.getContent("D:/1.txt"); System.out.println("--字节数组"+buf); String bufStr =new String(buf); System.out.println("--字节数组转换为字符串"+bufStr); //将byte数组写入文件 filehelper.createFile("D:/2.txt", buf); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
将一个文件读取为字节数组,此时打印出来发现什么也看不懂,解决办法:将字节数组强制转换为字符串
方法一:使用new String转换为字符串 (推荐)
方法二:上网查找自定义的字节数组转换为字符串的函数
二、将字节数组直接写入到文件,此时查看目标文件,已经是字符串格式的了
源文件:123456789.0 我爱北京天安门
字节数组:[B@2a139a55
字节数组转换为字符串:123456789.0 我爱北京天安门
目标文件:123456789.0 我爱北京天安门