综合实例
本案例主要写一个工具类,该工具类主要实现读写文件和复制文件功能。
import com.sun.xml.internal.bind.v2.model.runtime.RuntimeReferencePropertyInfo; import java.io.*; public class IOUtils { //IO的工具类 public static void print(byte[] ary) { for (int b : ary) { b &= 0xff; if(b <= 0xf){ System.out.print("0"); } System.out.print(Integer.toHexString(b)+" "); } System.out.println(); } public static byte[] read(String file){ try{ InputStream in = new FileInputStream(file); byte[] buf = new byte[in.available()]; in.read(buf); in.close(); return buf; } catch (IOException e) { e.printStackTrace(); throw new RuntimeException(e); } } public static Object deepCopy(Object obj) { try { ByteArrayOutputStream buf = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(buf); oos.writeObject(obj); oos.close(); byte[] ary = buf.toByteArray(); ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(ary)); Object o = ois.readObject(); ois.close(); return o; } catch (Exception e){ throw new RuntimeException(e); } } public static void cp(File from, File to){ try { InputStream in = new FileInputStream(from); OutputStream out = new FileOutputStream(to); byte[] buf = new byte[1024]; int len; while((len = in.read(buf)) != -1) { out.write(buf, 0, len); } in.close(); out.close(); } catch (IOException e){ e.printStackTrace(); throw new RuntimeException(e); } } public static void cp1(File from, File to) { try { InputStream in = new FileInputStream(from); OutputStream out = new FileOutputStream(to); int len; while((len = in.read()) != -1) { out.write(len); } in.close(); out.close(); } catch (IOException e) { e.printStackTrace(); throw new RuntimeException(e); } } public static void cp(String from, String to) { cp(new File(from), new File(to)); } //将文件按照16进制形式打印到控制台,每16个byte为一行 public static void print(File file) { try { InputStream in = new FileInputStream(file); int len; int i = 1; while((len = in.read()) != -1) { if(len <= 0xf) System.out.print("0"); System.out.print(Integer.toHexString(len)+" "); if (i++ % 16 ==0){ System.out.println(); } } System.out.println(); in.close(); } catch (IOException e){ e.printStackTrace(); throw new RuntimeException(e); } } public static void print(String file) { print(new File(file)); } /* 将文件切分为指定大小的系列文件 文件大小以k为单位 */ public static void split(String file, int size) { try { if(size <= 0) { throw new IllegalArgumentException("搞啥呀!"); } int idx = 0;//文件的序号 InputStream in = new BufferedInputStream(new FileInputStream(file)); OutputStream out = new BufferedOutputStream(new FileOutputStream(file + "." + idx++)); int b; int count = 0; while((b = in.read()) != -1){ out.write(b); count++; } if(count % (size * 1024) == 0) { out.close(); out = new BufferedOutputStream(new FileOutputStream(file + "." + idx++)); } } catch (IOException e) { e.printStackTrace(); throw new RuntimeException(e); } } public static void join(String file) { try { String fileName = file.substring(0,file.lastIndexOf(".")); String num = file.substring(file.lastIndexOf(".")+1); int idx = Integer.parseInt(num); OutputStream out = new FileOutputStream(fileName); File f = new File(fileName + "." + idx++); while(f.exists()) { InputStream in = new FileInputStream(f); cp(in, out); in.close(); f= new File(fileName + "." + idx++); } out.close(); } catch (IOException e) { e.printStackTrace(); throw new RuntimeException(); } } //复制文件,复制in到out,不关闭流 public static void cp(InputStream in,OutputStream out) throws IOException { byte[] buf = new byte[1024*512];//512K缓冲 int count; while((count = in.read(buf)) != -1) { out.write(buf,0,count); } out.flush(); } }