多重方式解析二进制文件
2018-01-17 18:12
78 查看
public static void main(String[] args) { try { byte[] out = readFileInBytesToString("D:\\caIJIBAO\\out3.0\\1287.csv"); File outfile = new File("D:\\caIJIBAO\\out3.0\\123.csv"); if (!outfile.exists()) { outfile.createNewFile(); } DataOutputStream fw = new DataOutputStream(new FileOutputStream( outfile)); fw.write(new String(out).getBytes()); fw.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static byte[] readFileInBytesToString(String filePath) { final int readArraySizePerRead = 4096; File file = new File(filePath); ArrayList<Byte> bytes = new ArrayList<>(); try { if (file.exists()) { DataInputStream isr = new DataInputStream(new FileInputStream( file)); byte[] tempchars = new byte[readArraySizePerRead]; int charsReadCount = 0; while ((charsReadCount = isr.read(tempchars)) != -1) { for(int i = 0 ; i < charsReadCount ; i++){ bytes.add (tempchars[i]); } } isr.close(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return toPrimitives(bytes.toArray(new Byte[0])); } static byte[] toPrimitives(Byte[] oBytes) { byte[] bytes = n 1188e ew byte[oBytes.length]; for (int i = 0; i < oBytes.length; i++) { bytes[i] = oBytes[i]; } return bytes; } public String BinstrToStr(String binStr) { String[] tempStr=StrToStrArray(binStr); char[] tempChar=new char[tempStr.length]; for(int i=0;i<tempStr.length;i++) { tempChar[i]=BinstrToChar(tempStr[i]); } return String.valueOf(tempChar); } private String[] StrToStrArray(String str) { return str.split(" "); } //将二进制字符串转换为char private char BinstrToChar(String binStr){ int[] temp=BinstrToIntArray(binStr); int sum=0; for(int i=0; i<temp.length;i++){ sum +=temp[temp.length-1-i]<<i; } return (char)sum; } //将二进制字符串转换成int数组 private int[] BinstrToIntArray(String binStr) { char[] temp=binStr.toCharArray(); int[] result=new int[temp.length]; for(int i=0;i<temp.length;i++) { result[i]=temp[i]-48; } return result; } public void test055() throws IOException { File inFile = new File("d:\\Chrysanthemum.jpg"); FileInputStream fileInputStream = new FileInputStream(inFile); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); int i; //转化为字节数组流 while ((i = fileInputStream.read()) != -1) { byteArrayOutputStream.write(i); } fileInputStream.close(); // 把文件存在一个字节数组中 byte[] filea = byteArrayOutputStream.toByteArray(); byteArrayOutputStream.close(); String encoding = "ISO-8859-1"; String fileaString = new String(filea, encoding); System.out.println(fileaString); // 写入文件 FileOutputStream fileOutputStream = new FileOutputStream("d:/b.png"); fileOutputStream.write(fileaString.getBytes(encoding)); fileOutputStream.flush(); fileOutputStream.close();}
import struct myfile = open('D://caIJIBAO//out3.0//1287.csv','rb') print (struct.unpack(myfile,bytes))public class MyZipCompressing {private int k = 1; // 定义递归次数变量private void zip(String zipFileName, File inputFile) throws Exception {System.out.println("压缩中...");ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFileName));BufferedOutputStream bo = new BufferedOutputStream(out);zip(out, inputFile, inputFile.getName(), bo);bo.close();out.close(); // 输出流关闭System.out.println("压缩完成");}private void zip(ZipOutputStream out, File f, String base,BufferedOutputStream bo) throws Exception { // 方法重载if (f.isDirectory()) {File[] fl = f.listFiles();if (fl.length == 0) {out.putNextEntry(new ZipEntry(base + "/")); // 创建zip压缩进入点baseSystem.out.println(base + "/");}for (int i = 0; i < fl.length; i++) {zip(out, fl[i], base + "/" + fl[i].getName(), bo); // 递归遍历子文件夹}System.out.println("第" + k + "次递归");k++;} else {out.putNextEntry(new ZipEntry(base)); // 创建zip压缩进入点baseSystem.out.println(base);FileInputStream in = new FileInputStream(f);BufferedInputStream bi = new BufferedInputStream(in);int b;while ((b = bi.read()) != -1) {bo.write(b); // 将字节流写入当前zip目录}bi.close();in.close(); // 输入流关闭}}public static void main(String[] args) {// TODO Auto-generated method stublong startTime=System.currentTimeMillis();try {ZipInputStream Zin=new ZipInputStream(new FileInputStream("C:\\Users\\HAN\\Desktop\\stock\\SpectreCompressed.zip"));//输入源zip路径BufferedInputStream Bin=new BufferedInputStream(Zin);String Parent="C:\\Users\\HAN\\Desktop"; //输出路径(文件夹目录)File Fout=null;ZipEntry entry;try {while((entry = Zin.getNextEntry())!=null && !entry.isDirectory()){Fout=new File(Parent,entry.getName());if(!Fout.exists()){(new File(Fout.getParent())).mkdirs();}FileOutputStream out=new FileOutputStream(Fout);BufferedOutputStream Bout=new BufferedOutputStream(out);int b;while((b=Bin.read())!=-1){Bout.write(b);}Bout.close();out.close();System.out.println(Fout+"解压成功");}Bin.close();Zin.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}long endTime=System.currentTimeMillis();System.out.println("耗费时间: "+(endTime-startTime)+" ms");}/*** java.io包中的OutputStream及其子类专门用于写二进制数据。* FileOutputStream是其子类,可用于将二进制数据写入文件。* DataOutputStream是OutputStream的另一个子类,它可以* 连接到一个FileOutputStream上,便于写各种基本数据类型的数据。*/public void writeMethod1(){String fileName="c:/kuka1.dat";int value0=255;int value1=0;int value2=-1;try{//将DataOutputStream与FileOutputStream连接可输出不同类型的数据//FileOutputStream类的构造函数负责打开文件kuka.dat,如果文件不存在,//则创建一个新的文件,如果文件已存在则用新创建的文件代替。然后FileOutputStream//类的对象与一个DataOutputStream对象连接,DataOutputStream类具有写//各种数据类型的方法。DataOutputStream out=new DataOutputStream(new FileOutputStream(fileName));out.writeInt(value0);out.writeInt(value1);out.writeInt(value2);out.close();} catch (Exception e){e.printStackTrace();}}//对于大量数据的写入,使用缓冲流BufferedOutputStream类可以提高效率public void writeMethod2(){String fileName="c:/kuka2.txt";try{DataOutputStream out=new DataOutputStream(new BufferedOutputStream(new FileOutputStream(fileName)));out.writeInt(10);System.out.println(out.size()+" bytes have been written.");out.writeDouble(31.2);System.out.println(out.size()+" bytes have been written.");out.writeBytes("JAVA");System.out.println(out.size()+" bytes have been written.");out.close();} catch (Exception e){e.printStackTrace();}}/*** 对二进制文件比较常见的类有FileInputStream,DataInputStream* BufferedInputStream等。类似于DataOutputStream,DataInputStream* 也提供了很多方法用于读入布尔型、字节、字符、整形、长整形、短整形、* 单精度、双精度等数据。*/public void readMethod1(){String fileName="c:/kuka1.dat";int sum=0;try{DataInputStream in=new DataInputStream(new BufferedInputStream(new FileInputStream(fileName)));sum+=in.readInt();sum+=in.readInt();sum+=in.readInt();System.out.println("The sum is:"+sum);in.close();} catch (Exception e){e.printStackTrace();}}public void readMethod2(){try{FileInputStream stream=new FileInputStream("c:/kuka.dat");int c;while((c=stream.read())!=-1){System.out.println(c);}} catch (Exception e){e.printStackTrace();}}
public static void main(String[] args) throws Exception {test055();}public static void test055() throws IOException {File inFile = new File("D:\\caIJIBAO\\out3.0\\60287.csv");FileInputStream fileInputStream = new FileInputStream(inFile);ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();int i;//转化为字节数组流while ((i = fileInputStream.read()) != -1) {byteArrayOutputStream.write(i);}fileInputStream.close();// 把文件存在一个字节数组中byte[] filea = byteArrayOutputStream.toByteArray();byteArrayOutputStream.close();//ISO-8859-1String encoding = "UTF-8";String fileaString = new String(filea, encoding);System.out.println(fileaString);// 写入文件FileOutputStream fileOutputStream = new FileOutputStream("D:\\caIJIBAO\\out3.0\\123.csv");fileOutputStream.write(fileaString.getBytes(encoding));fileOutputStream.flush();fileOutputStream.close();}
相关文章推荐
- .Net下二进制形式的文件(图片)的存储与读取详细解析
- C语言采用文本方式和二进制方式打开文件的区别分析
- C/C++中二进制与文本方式打开文件的区别
- 文件读写: 二进制方式和文本方式的区别
- 通过反射的方式解析R文件
- 【转】Windows快捷方式文件格式解析(中文)
- 通过反射的方式解析R文件
- Java解析Xml文件—判断Xml文件的节点是否存在子节点_以及对节点下不同子节点的内容解析方式
- QT读写XML文件之DOM方式解析XML
- c#-以二进制方式读文件
- xml文件--DOM方式解析xml
- [libexpat]_[XML处理]_[C/C++使用libexpat库以数据流(SAX模型)的方式读取(解析)大XML文件]
- 在以二进制文件打开方式打开文件的时候,fread返回值判断文件是否结束的问题
- AS3 下通过HTTP协议 实现Form方式实现二进制文件上传
- 文件读写: 二进制方式和文本方式的区别
- [VBA] 以二进制方式打开文件
- 用Adodb.Stream将以二进制方式保存在数据库中的文件保存到硬盘
- Android学习笔记42:XML文件解析(DOM方式)
- 文件读写:fwrite与fprintf的区别(即二进制方式和文本方式的区别)
- dtd与schema的区别&XML文件解析常用方式