您的位置:首页 > 其它

多重方式解析二进制文件

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();}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: