思路:按照字节读取文件到缓冲,然后对文件内容进行处理。
代码如下:
public static void readFile() throws IOException{RandomAccessFile f = new RandomAccessFile("test.txt", "r")
byte[] b = new byte[(int)f.length()]
//将文件按照字节方式读入到字节缓存中
f.read(b)
//将字节转换为utf-8 格式的字符串
String input = new String(b, "utf-8")
//可以匹配到所有的数字
Pattern pattern = Pattern.compile("\\d+(\\.\\d+)?")
Matcher match = pattern.matcher(input)
while(match.find()) {
//match.group(0)即为你想获取的数据
System.out.println(match.group(0))
}
f.close()
}
二进制读取文件的形式中如果用的是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流会一直存在,直到程序运行结束。