Java多种读取文件方式

import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.RandomAccessFile; import java.io.Reader; public class MultiJavaReadFiles { /** * 以字节为单位读取文件,常用于读二进制文件,例如图片、声音、影像等文件 * @param fileName */ private 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.println(tempbyte); } in.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } try { System.out.println("以字节为单位读取文件内容,一次读多个字节:"); byte[] tempbytes = new byte[100]; int byteread = 0; in = new FileInputStream(file); //读取多个字节到数组中,byteread为一次读入的字节数 while((byteread = in.read(tempbytes)) != -1) { System.out.write(tempbytes, 0, byteread); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if(in != null) { try { in.close(); } catch (IOException e) { e.printStackTrace(); } } } } /** * 按字符读文件,常用于读文本,数字等类型文件 * @param fileName */ private 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下,rn这两个字符在一起时,表示一个换行。 //但如果这两个字符分开显示时,会换两次行。 //因此,屏蔽掉r,或者屏蔽n。否则,将会多出很多空行。 if((char)tempchar != 'r') { System.out.println((char)tempchar); } reader.close(); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } try { System.out.println("以字符为单位读取文件内容,一次读取多个字符:"); char[] tempchars = new char[30]; int charread = 0; reader = new InputStreamReader(new FileInputStream(file)); //读入多个字符到字符数组中,charread为一次读取字符数 //read(char[] tempchars)方法把字符读入数组,并且返回读取的字符数,如果已到达流的末尾,则返回 -1 while((charread = reader.read(tempchars)) != -1) { //屏蔽掉r不显示 if((charread == tempchars.length) && (tempchars[tempchars.length - 1]) != -1) { System.out.println(tempchars); } else { for(int i=0; i<charread; i++) { if(tempchars[i] == 'r') { continue; } else { System.out.println(tempchars[i]); } } } } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if(reader != null) { try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } } } /** * 以行为单位读取文件,常用于读面向行的格式化文件 * @param fileName 文件名 */ 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) { } } } } /** * 随机读取文件内容 * @param fileName 文件名 */ 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个字节,则读剩下的字节。 // 将一次读取的字节数赋给byteread while ((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) { } } } } /** * 显示输入流中还剩的字节数 * @param in */ 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"; MultiJavaReadFiles.readFileByBytes(fileName); MultiJavaReadFiles.readFileByChars(fileName); MultiJavaReadFiles.readFileByLines(fileName); MultiJavaReadFiles.readFileByRandomAccess(fileName); } }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值