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
}
}
}