java读取文件及文件流
//java读取文件或是文件流的代码,涵盖了读取jar文件中的文件流,网络文件流等,有些读取方式为了防止编码转换带来的问题,采取了动态byte[]的方式读取,源码如下import java.io.BufferedInputStream;import java.io.File;import java.io.BufferedOutputStream;import java.io.IOException;import java.io.FileInputStream;import java.io.FileOutputStream;public class Util {public Util() {}/** * 读取源文件内容 * @param filename String 文件路径 * @throws IOException * @return byte[] 文件内容 */public static byte[] readFile(String filename) throws IOException { File file =new File(filename); if(filename==null || filename.equals("")) { throw new NullPointerException("无效的文件路径"); } long len = file.length(); byte[] bytes = new byte[(int)len]; BufferedInputStream bufferedInputStream=new BufferedInputStream(new FileInputStream(file)); int r = bufferedInputStream.read( bytes ); if (r != len) throw new IOException("读取文件不正确"); bufferedInputStream.close(); return bytes;}/** * 将数据写入文件 * @param data byte[] * @throws IOException */public static void writeFile(byte[] data,String filename) throws IOException { File file =new File(filename); file.getParentFile().mkdirs(); BufferedOutputStream bufferedOutputStream=new BufferedOutputStream(new FileOutputStream(file)); bufferedOutputStream.write(data); bufferedOutputStream.close();}/** * 从jar文件里读取class * @param filename String * @throws IOException * @return byte[] */public byte[] readFileJar(String filename) throws IOException { BufferedInputStream bufferedInputStream=new BufferedInputStream(getClass().getResource(filename).openStream()); int len=bufferedInputStream.available(); byte[] bytes=new byte[len]; int r=bufferedInputStream.read(bytes); if(len!=r) { bytes=null; throw new IOException("读取文件不正确"); } bufferedInputStream.close(); return bytes;}/** * 读取网络流,为了防止中文的问题,在读取过程中没有进行编码转换,而且采取了动态的byte[]的方式获得所有的byte返回 * @param bufferedInputStream BufferedInputStream * @throws IOException * @return byte[] */public byte[] readUrlStream(BufferedInputStream bufferedInputStream) throws IOException { byte[] bytes = new byte[100]; byte[] bytecount=null; int n=0; int ilength=0; while((n=bufferedInputStream.read(bytes))>=0) { if(bytecount!=null) ilength=bytecount.length; byte[] tempbyte=new byte[ilength+n]; if(bytecount!=null) { System.arraycopy(bytecount,0,tempbyte,0,ilength); } System.arraycopy(bytes,0,tempbyte,ilength,n); bytecount=tempbyte; if(n<bytes.length) break; } return bytecount;}}?