博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 文件读写操作
阅读量:6267 次
发布时间:2019-06-22

本文共 7433 字,大约阅读时间需要 24 分钟。

1【1】按字节读写,一次只读取一个字节,效率比较低

1 package bk1; 2  3 import java.io.File; 4 import java.io.FileInputStream; 5  6 import java.io.IOException; 7 import java.io.InputStream; 8  9 10 public class Dx1 {11     public void display() //按字节读取文件内容,每次只能读取一个字节12     {13         File file =new File("课表.txt");//用来传文件的名字14         InputStream in = null;15         try{16         in=new FileInputStream(file); 17             18             19             20         21         int zijie;22         System.out.println("按字节读出的结果");23         while((zijie=in.read())!=-1)24         {25             System.out.write(zijie);26         }27         in.close();28         }29         catch (IOException e) {30             // TODO: handle exception31             System.out.println(e.getMessage());32             return;//退出程序33         }34     }35 36     public static void main(String[] args) throws IOException {37         // TODO Auto-generated method stub38         Dx1 D=new Dx1();39         D.display();40     }41 42 }

【2】按字节读写,一次可以读写多个字节

1 package bk1; 2  3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.IOException; 6 import java.io.InputStream; 7  8 public class Dx2 { 9     public void display()10 11     {12         File file =new File("课表.txt");13         InputStream in = null;14         try {15             System.out.println("以字节为单位读取文件内容,一次读多个字节:");16             // 一次读多个字节17             byte[] tempbytes = new byte[100];18             int byteread = 0;19             in = new FileInputStream("课表.txt");20             Dx2.showAvailableBytes(in);21             // 读入多个字节到字节数组中,byteread为一次读入的字节数22             while ((byteread = in.read(tempbytes)) != -1) {23                 System.out.write(tempbytes, 0, byteread);24             }25         } catch (Exception e1) {26             e1.printStackTrace();27         } finally {28             if (in != null) {29                 try {30                     in.close();31                 } catch (IOException e1) {32                 }33             }34         }35     }36     static void showAvailableBytes(InputStream in) {37         try {38             System.out.println("当前字节输入流中的字节数为:" + in.available());39         } catch (IOException e) {40             e.printStackTrace();41         }42     }43     44     public static void main(String[] args) {45         // TODO Auto-generated method stub46         Dx2 D=new Dx2();47         D.display();48     }49 50 }

2【1】以字符为单位读取文件内容,一次读一个字符

【2】以字符为单位读取文件内容,一次读多个字符

1 package bk1; 2  3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.IOException; 6 import java.io.InputStreamReader; 7 import java.io.Reader; 8  9 public class Dx3 {10     public static void readFileByChars(String fileName) {11         File file = new File("课表.txt");12         Reader reader = null;13         try {14             System.out.println("以字符为单位读取文件内容,一次读一个字符:");15             // 一次读一个字符16             17             reader=new InputStreamReader(new FileInputStream(file));18             int tempchar;19             while ((tempchar = reader.read()) != -1) {20                 // 对于windows下,rn这两个字符在一起时,表示一个换行。21                 // 但如果这两个字符分开显示时,会换两次行。22                 // 因此,屏蔽掉r,或者屏蔽n。否则,将会多出很多空行。23                 if (((char) tempchar) != 'r') {24                     System.out.print((char) tempchar);25                 }26             }27             reader.close();28         } catch (Exception e) {29             e.printStackTrace();30         }31         try {32             System.out.println("以字符为单位读取文件内容,一次读多个字符:");33             // 一次读多个字符34             char[] tempchars = new char[30];35             int charread = 0;36             reader = new InputStreamReader(new FileInputStream("课表.txt"));37             // 读入多个字符到字符数组中,charread为一次读取字符数38             while ((charread = reader.read(tempchars)) != -1) {39                 // 同样屏蔽掉r不显示40                 if ((charread == tempchars.length)41                         && (tempchars[tempchars.length - 1] != 'r')) {42                     System.out.print(tempchars);43                 } else {44                     for (int i = 0; i < charread; i++) {45                         if (tempchars[i] == 'r') {46                             continue;47                         } else {48                             System.out.print(tempchars[i]);49                         }50                     }51                 }52             }53         } catch (Exception e1) {54             e1.printStackTrace();55         } finally {56             if (reader != null) {57                 try {58                     reader.close();59                 } catch (IOException e1) {60                 }61             }62         }63     }64 65     public static void main(String[] args) {66         // TODO Auto-generated method stub67         Dx3.readFileByChars("课表.txt");68     }69 70 }

截图:

文件中的r字符无法读出。

3以行为单位读取文件内容,一次读一整行

1 package bk1; 2  3 import java.io.BufferedReader; 4 import java.io.File; 5 import java.io.FileReader; 6 import java.io.IOException; 7  8 public class Dx4 { 9     public static void readFileByLines(String fileName) {10         File file = new File("课表.txt");11         BufferedReader reader = null;12         try {13             System.out.println("以行为单位读取文件内容,一次读一整行:");14             reader = new BufferedReader(new FileReader(file));15             String tempString = null;16             int line = 1;17             // 一次读入一行,直到读入null为文件结束18             while ((tempString = reader.readLine()) != null) {19                 // 显示行号20                 System.out.println("line " + line + ": " + tempString);21                 line++;22             }23             reader.close();24         } catch (IOException e) {25             e.printStackTrace();26         } finally {27             if (reader != null) {28                 try {29                     reader.close();30                 } catch (IOException e1) {31                 }32             }33         }34     }35 36     public static void main(String[] args) {37         // TODO Auto-generated method stub38         Dx4.readFileByLines("课表.txt");39 40     }41 42 }

4随机读取一段文件内容

package bk1;import java.io.IOException;import java.io.RandomAccessFile;public class Dx5 {    public static void readFileByRandomAccess(String fileName) {        RandomAccessFile randomFile = null;        try {            System.out.println("随机读取一段文件内容:");            // 打开一个随机访问文件流,按只读方式            randomFile = new RandomAccessFile("课表.txt", "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) {                }            }        }    }    public static void main(String[] args) {        // TODO Auto-generated method stub        Dx5.readFileByRandomAccess("课表.txt");    }}

 

转载于:https://www.cnblogs.com/zyt-bg/p/7912553.html

你可能感兴趣的文章
[SilverLight]DataGrid实现批量输入(like Excel)(补充)
查看>>
秋式广告杀手:广告拦截原理与杀手组织
查看>>
翻译 | 摆脱浏览器限制的JavaScript
查看>>
闲扯下午引爆乌云社区“盗窃”乌云币事件
查看>>
02@在类的头文件中尽量少引入其他头文件
查看>>
JAVA IO BIO NIO AIO
查看>>
input checkbox 复选框大小修改
查看>>
网吧维护工具
查看>>
BOOT.INI文件参数
查看>>
vmstat详解
查看>>
新年第一镖
查看>>
unbtu使用笔记
查看>>
MaxCompute 学习计划(一)
查看>>
OEA 中 WPF 树型表格虚拟化设计方案
查看>>
Android程序开发初级教程(一) 开始 Hello Android
查看>>
使用Gradle打RPM包
查看>>
“我意识到”的意义
查看>>
淘宝天猫上新辅助工具-新品填表
查看>>
再学 GDI+[43]: 文本输出 - 获取已安装的字体列表
查看>>
nginx反向代理
查看>>