欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java读取二进制文件数据

程序员文章站 2022-06-11 14:35:58
...

java读取二进制文件数据

  • 1.读取文件信息
    java提供多种读取方式:
 /**
	 * 按字节读取文件数据
	 * @param fileName 文件路径包括文件名
	 */
	public static void readFileByBytes(String fileName) {
		try {
			//传入文件路径fileName,底层实现 new FileInputStream(new File(fileName));相同
			FileInputStream in = new FileInputStream(fileName);
			//每次读10个字节,放到数组里
			byte[] bytes = new byte[10];
			
			int c;
			while((c=in.read(bytes))!=-1){
				System.out.println(Arrays.toString(bytes));
			}
		} catch (Exception e) {
			// TODO: handle exception
		}
	}
	/**
	 * 按字符读取文件数据
	 * @param fileName 文件路径包括文件名
	 */
	public static void readFileByChar(String fileName) {
		try {
			//传入文件路径fileName,底层实现 new FileInputStream(new File(fileName));相同
			FileInputStream in = new FileInputStream(fileName);
			//注意根据文件编码格式指定InputStreamReader的编码
			InputStreamReader reader = new InputStreamReader(in,"ASCII");
			//按字符读取,将以下的bytes替换成chars
			char[] chars = new char[10];
			int c;
			while((c=reader.read(chars))!=-1){
				System.out.println(Arrays.toString(chars));
			}
		} catch (Exception e) {
			// TODO: handle exception
		}
	}
/**
	 * 按行读取文件数据
	 * @param fileName 文件路径包括文件名
	 */
	public static void readFileByLine(String fileName) {
		try {
			//传入文件路径fileName,底层实现 new FileInputStream(new File(fileName));相同
			FileInputStream in = new FileInputStream(fileName);
			//注意根据文件编码格式指定InputStreamReader的编码
			InputStreamReader reader = new InputStreamReader(in,"ASCII");
			//
			BufferedReader bufferedReader = new BufferedReader(reader);
			String line;
			while((line=bufferedReader.readLine())!=null){
				System.out.println(line);
			}
			bufferedReader.close();
		} catch (Exception e) {
			// TODO: handle exception
		}
	}
  • 2.截取指定字节数据
 /**
	 *根据编码格式截取指定字节数的字符串
	 * 
	 * @param str 要截取的字符串
	 * @param bytes 截取的字节数
	 * @param charSetName 编码格式
	 * @return
	 */
	public static String subStringByBytes(String str, int bytes,String charSetName) {
		String subAfter = str.substring(0, bytes);
		int temp = bytes;
		try {
			//因为编码格式不一样所占字符也不一样
			//直到截取的字符串的字节数  和   需要的 截取的字节数相等位为止
			while(bytes < subAfter.getBytes(charSetName).length){
				subAfter = subAfter.substring(0,--temp );
			}
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return subAfter;
	}
  • 3.实现读取二进制文件,并截取数据
public class DemoApplicationTests {

	public static void main(String[] args) {
		String fileName = "E:\\work\\Read_AccpuntMsg.dat";
		readFileByLine(fileName);
	}


	/**
	 * 按行读取文件数据
	 * @param fileName 文件路径包括文件名
	 */
	public static void readFileByLine(String fileName) {
		try {
			//传入文件路径fileName,底层实现 new FileInputStream(new File(fileName));相同
			FileInputStream in = new FileInputStream(fileName);
			//注意根据文件编码格式指定InputStreamReader的编码
			InputStreamReader reader = new InputStreamReader(in,"ASCII");
			//
			BufferedReader bufferedReader = new BufferedReader(reader);
			String line;
			while((line=bufferedReader.readLine())!=null){
				//行数据处理
				System.out.println(line);
				//截取行数据前21个字节的数据
				String ascii = subStringByBytes(line, 21, "ASCII");
				System.out.println("name>>>"+ascii);

				//将上一步截取的21个字节数据去掉,
				String s = line.replaceFirst(ascii,"");
				//在新的字符串上截取前2个字节的数据
				String ascii1 = subStringByBytes(s, 2, "ASCII");
				System.out.println("sex>>>"+ascii1);

			}
			bufferedReader.close();
		} catch (Exception e) {
			// TODO: handle exception
		}
	}
}