java二进制读取文件内容|java 读取文本的二进制编码

java二进制读取文件内容|java 读取文本的二进制编码的第1张示图

⑴ java中读取文件(二进制,字符)内容的几种方

JAVA中读取文件内容的方法有很多,比如按字节读取文件内容,按字符读取文件内容,按行读取文件内容,随机读取文件内容等方法,本文就以上方法的具体实现给出代码,需要的可以直接复制使用public class ReadFromFile {/*** 以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。*/public static void readFileByBytes(String fileName) {File file = new File(fileName);InputStream in = null;try {System.out.println("以字节为单位读取文件内容,一次读一个字节:");// 一次读一个字节in = new FileInputStream(file);int tempbyte;while ((tempbyte = in.read()) != -1) {System.out.write(tempbyte);}in.close();} catch (IOException e) {e.printStackTrace();return;}try {System.out.println("以字节为单位读取文件内容,一次读多个字节:");// 一次读多个字节byte[] tempbytes = new byte[100];int byteread = 0;in = new FileInputStream(fileName);ReadFromFile.showAvailableBytes(in);// 读入多个字节到字节数组中,byteread为一次读入的字节数while ((byteread = in.read(tempbytes)) != -1) {System.out.write(tempbytes, 0, byteread);}} catch (Exception e1) {e1.printStackTrace();} finally {if (in != null) {try {in.close();} catch (IOException e1) {}}}}/*** 以字符为单位读取文件,常用于读文本,数字等类型的文件*/public static void readFileByChars(String fileName) {File file = new File(fileName);Reader reader = null;try {System.out.println("以字符为单位读取文件内容,一次读一个字节:");// 一次读一个字符reader = new InputStreamReader(new FileInputStream(file));int tempchar;while ((tempchar = reader.read()) != -1) {// 对于windows下,\r\n这两个字符在一起时,表示一个换行。// 但如果这两个字符分开显示时,会换两次行。// 因此,屏蔽掉\r,或者屏蔽\n。否则,将会多出很多空行。if (((char) tempchar) != '\r') {System.out.print((char) tempchar);}}reader.close();} catch (Exception e) {e.printStackTrace();}try {System.out.println("以字符为单位读取文件内容,一次读多个字节:");// 一次读多个字符char[] tempchars = new char[30];int charread = 0;reader = new InputStreamReader(new FileInputStream(fileName));// 读入多个字符到字符数组中,charread为一次读取字符数while ((charread = reader.read(tempchars)) != -1) {// 同样屏蔽掉\r不显示if ((charread == tempchars.length)&& (tempchars[tempchars.length – 1] != '\r')) {System.out.print(tempchars);} else {for (int i = 0; i < charread; i++) {if (tempchars[i] == '\r') {continue;} else {System.out.print(tempchars[i]);}}}}} catch (Exception e1) {e1.printStackTrace();} finally {if (reader != null) {try {reader.close();} catch (IOException e1) {}}}}/*** 以行为单位读取文件,常用于读面向行的格式化文件*/public static void readFileByLines(String fileName) {File file = new File(fileName);BufferedReader reader = null;try {System.out.println("以行为单位读取文件内容,一次读一整行:");reader = new BufferedReader(new FileReader(file));String tempString = null;int line = 1;// 一次读入一行,直到读入null为文件结束while ((tempString = reader.readLine()) != null) {// 显示行号System.out.println("line " + line + ": " + tempString);line++;}reader.close();} catch (IOException e) {e.printStackTrace();} finally {if (reader != null) {try {reader.close();} catch (IOException e1) {}}}}/*** 随机读取文件内容*/public static void readFileByRandomAccess(String fileName) {RandomAccessFile randomFile = null;try {System.out.println("随机读取一段文件内容:");// 打开一个随机访问文件流,按只读方式randomFile = new RandomAccessFile(fileName, "r");// 文件长度,字节数long fileLength = randomFile.length();// 读文件的起始位置int beginIndex = (fileLength > 4) ? 4 : 0;// 将读文件的开始位置移到beginIndex位置。randomFile.seek(beginIndex);byte[] bytes = new byte[10];int byteread = 0;// 一次读10个字节,如果文件内容不足10个字节,则读剩下的字节。// 将一次读取的字节数赋给bytereadwhile ((byteread = randomFile.read(bytes)) != -1) {System.out.write(bytes, 0, byteread);}} catch (IOException e) {e.printStackTrace();} finally {if (randomFile != null) {try {randomFile.close();} catch (IOException e1) {}}}}/*** 显示输入流中还剩的字节数*/private static void showAvailableBytes(InputStream in) {try {System.out.println("当前字节输入流中的字节数为:" + in.available());} catch (IOException e) {e.printStackTrace();}}public static void main(String[] args) {String fileName = "C:/temp/newTemp.txt";ReadFromFile.readFileByBytes(fileName);ReadFromFile.readFileByChars(fileName);ReadFromFile.readFileByLines(fileName);ReadFromFile.readFileByRandomAccess(fileName);}}

⑵ java读取二进制文件中的数据的问题

二进制读取文件的形式中如果用的是read读取,那么此时就会出现乱码问题(中文是回两个字节,read只能读答取一个),所以都是通过readline方法来进行整行的内容读取来进行问题解决。可以通过BufferedReader 流的形式进行流缓存,之后通过readLine方法获取到缓存的内容。 BufferedReader bre = null;try {String file = "D:/test/test.txt";bre = new BufferedReader(new FileReader(file));//此时获取到的bre就是整个文件的缓存流while ((str = bre.readLine())!= null) // 判断最后一行不存在,为空结束循环{System.out.println(str);//原样输出读到的内容};备注: 流用完之后必须close掉,如上面的就应该是:bre.close(),否则bre流会一直存在,直到程序运行结束。

⑶ 怎样用Java读写二进制文件

import java.util.*;import java.io.*;class SmallFile { static final int HEADLEN = 24; //头总长度 byte[] fileName = new byte[16]; //列表文件名1: 长度128 想把它读到char[]里 它的编码方式不是Unicode。在不确定编码方式的时候,最好直接用byte[]来存放 int offset; //列表文件地址1: 长度32 想把它读到int里 int length = -1; //列表文件长度1: 长度32 想把它读到int里 byte[] content; public SmallFile() { } public SmallFile(byte[] fn, byte[] content) { Arrays.fill(fileName, (byte) 0); if (fn != null) { if (fn.length <= 16) { System.array(fn, 0, fileName, 0, fn.length); } else { System.array(fn, 0, fileName, 0, 16); } } this.content = content; if (content != null) { this.length = content.length; } else { this.length = -1; } }}public class ReadBinary { static final int HEADLEN = 8; //头总长度 private String filename; private byte[] filehead = new byte[4]; //文件头: 长度32 想把它读到char[]里 它的编码方式不是Unicode private int filecount = -1; //列表长度: 长度32 想把它读到int里 假设他是3 就会有3个列表文件名 private List<SmallFile> files = null; public void setFilehead(byte[] fh) { if (fh == null) return; Arrays.fill(filehead, (byte) 0); if (fh.length <= 4) { System.array(fh, 0, filehead, 0, fh.length); } else { System.array(fh, 0, filehead, 0, 4); } } public ReadBinary(String filename) { try { readFromFile(filename); } catch (Exception ex) { System.out.println(ex.getMessage()); System.out.println("在载入数据文件时失败,因此视同为新建一个数据文件!"); this.filename = filename; Arrays.fill(filehead, (byte) 0); filecount = 0; files = new ArrayList<SmallFile> (); } } public void readFromFile(String filename) throws Exception { BufferedInputStream bin = new BufferedInputStream(new FileInputStream( filename)); this.filename = filename; DataInputStream in = new DataInputStream(bin); in.read(filehead); //文件头: 长度32 想把它读到char[]里 它的编码方式不是Unicode filecount = in.readInt(); //列表长度: 长度32 想把它读到int里 假设他是3 就会有3个列表文件名 if (files == null) { files = new ArrayList<SmallFile> (); } else { files.clear(); } for (int i = 0; i < filecount; i++) { SmallFile file = new SmallFile(); in.read(file.fileName); file.offset = in.readInt(); //列表文件地址1: 长度32 想把它读到int里 file.length = in.readInt(); //列表文件长度1: 长度32 想把它读到int里 files.add(file); } } public void writeToFile() throws Exception { String temp = filename + ".tmp"; //临时文件 boolean exists = false; RandomAccessFile raf = null; try { raf = new RandomAccessFile(filename, "r"); //文件存在则从文件读入 exists = true; } catch (Exception ex) { System.out.println("文件不存在,因此启用内存写入模式"); } if (filecount != files.size()) { throw new Exception("怪事,居然不相同??"); } DataOutputStream out = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(temp))); //1、写总文件头 out.write(filehead); out.writeInt(filecount); //2、写列表头 int sumlength = 0; for (int i = 0; i < files.size(); i++) { SmallFile file = files.get(i); out.write(file.fileName); if (file.length < 0) { throw new Exception("怪事,文件长度怎么可能小于0?"); } else { out.writeInt(ReadBinary.HEADLEN + SmallFile.HEADLEN * filecount + sumlength); sumlength += file.length; out.writeInt(file.length); } } //3、写文件内容 for (int i = 0; i < files.size(); i++) { SmallFile file = files.get(i); if (file.content != null && (file.length == file.content.length)) { out.write(file.content); } else if (exists) { raf.seek(file.offset); byte[] b = new byte[file.length]; raf.read(b); System.out.println("b:" + new String(b)); out.write(b); } else { throw new Exception("怪事,又不能从内存读,又不能从文件读。这活没法干了!"); } } out.close(); if (raf != null) { raf.close(); raf = null; } System.gc(); //把原先的文件删除 File f = new File(filename); f.delete(); //再把临时文件改名到正式文件 File f2 = new File(temp); f2.renameTo(f); } public void addFile(SmallFile file) { if (files != null) { filecount++; files.add(file); } } public static void test1(){ ReadBinary rb = new ReadBinary("f:\\temp\\rb.dat"); rb.setFilehead("".getBytes()); SmallFile f = new SmallFile("第1个文件".getBytes(), "第1个文件的内容".getBytes()); rb.addFile(f); try { rb.writeToFile(); } catch (Exception ex) { ex.printStackTrace(); } } public static void test2(){ ReadBinary rb = new ReadBinary("f:\\temp\\rb.dat"); rb.setFilehead("HEA".getBytes()); SmallFile f = new SmallFile("第2个文件".getBytes(), "第2个文件的内容".getBytes()); rb.addFile(f); try { rb.writeToFile(); } catch (Exception ex) { ex.printStackTrace(); } } public static void main(String[] args) { //test1(); test2(); }}

⑷ Java 一个文件里面存储的是二进制数据 读取出来以字符串形式展示

不需要转换。解释:任何文件的存储都是通过二进制的形式进行存储的,只不过经过机器语言编译后,展示给用户的体验是中文或者是字符串形式。备注:如果是想将数字转换为二进制,可以直接通过Integer的toBinaryString方法直接进行转换,举例:int i =8;System.out.println(Integer.toBinaryString(i));输出结果就是:1000.

⑸ java实现解析二进制文件

/*** */package com.igen.case10;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.URISyntaxException;/*** * @ClassName Case10* @Description TODO** @author wjggwm* @data 2017年2月7日 上午11:46:25*/public class Case10 {static final String fileName = "/test.png";static final String filePath = "D:/files/case10";static final String sourceFileName = "binary";public static void main(String[] args) {try {readFile(Case10.class.getResource(sourceFileName).toURI().getPath());} catch (URISyntaxException e) {e.printStackTrace();}}/*** * @Description 解析二进制文件* @param sourceFileName** @author wjggwm* @data 2017年2月7日 上午11:47:12*/public static void readFile(String sourceFileName) {InputStream in = null;try {in = new FileInputStream(sourceFileName);// 读取字符串数据长度字节byte[] txtLenByte = new byte[2];in.read(txtLenByte);int txtlen = byte2ToUnsignedShort(txtLenByte, 0);// 读取字符串字节byte[] txtByte = new byte[txtlen];in.read(txtByte);//字符串为UTF-8编码String txt = new String(txtByte, "UTF-8");// 输出字符串System.out.println(txt);// 读取图片数据长度byte[] imgLenByte = new byte[4];in.read(imgLenByte);int imgLen = byte4ToInt(imgLenByte, 0);// 读取图片数据byte[] img = new byte[imgLen];in.read(img);// 生成图片文件saveToImgByBytes(filePath, fileName, img);} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {if (in != null) {try {in.close();} catch (IOException e) {e.printStackTrace();}}}}/*** * @Description 将字节写入文件* @param imgName* @param imgByte** @author wjggwm* @data 2017年2月7日 上午11:07:45*/public static void saveToImgByBytes(String filePath, String imgName, byte[] imgByte) {try {File dic = new File(filePath);if (!dic.exists()) {dic.mkdirs();}File image = new File(filePath + imgName);if (!image.exists()) {image.createNewFile();}FileOutputStream fos = new FileOutputStream(image);fos.write(imgByte);fos.flush();fos.close();} catch (Exception e) {e.printStackTrace();}}/*** * @Description byte数组转换为无符号short整数* @param bytes* @param off* @return** @author wjggwm* @data 2017年2月7日 上午11:05:58*/public static int byte2ToUnsignedShort(byte[] bytes, int off) {// 注意高位在后面,即大小端问题int low = bytes[off];int high = bytes[off + 1];return (high << 8 & 0xFF00) | (low & 0xFF);}/*** * @Description byte数组转换为int整数* @param bytes* @param off* @return** @author wjggwm* @data 2017年2月7日 上午11:07:23*/public static int byte4ToInt(byte[] bytes, int off) {// 注意高位在后面,即大小端问题int b3 = bytes[off] & 0xFF;int b2 = bytes[off + 1] & 0xFF;int b1 = bytes[off + 2] & 0xFF;int b0 = bytes[off + 3] & 0xFF;return (b0 << 24) | (b1 << 16) | (b2 << 8) | b3;}}

⑹ Java 读取一个二进制文件

//you read data codeFile obfile = new File("test.dat");//二进制文件名内:容test.dat BufferedInputStream instream; try { instream = new BufferedInputStream(new FileInputStream(obfile)); try { instream.read(data, 2, 23); instream.close(); } catch (IOException ex) { } } catch (FileNotFoundException ex) { }

⑺ java 读取文本的二进制编码

FileInputStream in= new FileInputStream("c:\\a.txt"); int data=0; while((data=in.read())!=-1){ System.out.print(Integer.toBinaryString(data)); }

⑻ 请教,怎么用JAVA来读取二进制文件

用FileInputStream读取文件,然后BufferedInputStream来装流,最后用read方法读出字节数组用

⑼ 如何实现用java语言读取二进制文件的内容解析后存储在链表里

首先解释一下你说的“用java实现链表,每个链表的节点只能储存一种类型的数据。我记得之前用C语言实现链表,每个链表上的节点是一个结构体啊,可以存储各种类型的数据”java是高级语言肯定要比c语言灵活的多,java的链表是可以存储任何类型的数据的,这个数据类型可以是一个对象,这个类你就可以自定义了,把你说的4个int一个String都定义成类的属性,用这个类生成的一个对象就可以看做是一个道路信息,这个类就可以看做你说的结构体,这个肯定要比你用c语言实现要简单的多。关于其他的思路,java的存储集合数据的类型还是很多的,链表顺序读取的效率比较高,具体用什么还要看你用什么排序算法了。写c语言你可能还是缺少了面向对象的思想,如果要学java多体会一下面向对象的思想。

⑽ 请教,怎么用JAVA来读取二进制文件并输出文件内容

Java读取二进制文件,以字节为单位进行读取,还可读取图片、音乐文件、视频文件等,回在Java中,提供了四答种类来对文件进行操作,分别是InputStream OutputStream Reader Writer ,前两种是对字节流的操作,后两种则是对字符流的操作。示例代码如下:public static void readFileByBytes(String fileName){ File file = new File(fileName); InputStream in = null; try { System.out.println("一次读一个"); // 一次读一个字节 in = new FileInputStream(file); int tempbyte; while ((tempbyte = in.read()) != -1) { System.out.write(tempbyte); } in.close(); } catch (IOException e) { e.printStackTrace(); return; }

未经允许不得转载:山九号 » java二进制读取文件内容|java 读取文本的二进制编码

赞 (0)