Java 文件读写操作

Posted 年少如诗

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 文件读写操作相关的知识,希望对你有一定的参考价值。

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 exception
31             System.out.println(e.getMessage());
32             return;//退出程序
33         }
34     }
35 
36     public static void main(String[] args) throws IOException {
37         // TODO Auto-generated method stub
38         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 stub
46         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 stub
67         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 stub
38         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");
    }

}

 

以上是关于Java 文件读写操作的主要内容,如果未能解决你的问题,请参考以下文章

java常用的文件读写操作

利用 Java io 包进行文件读写操作

Java读写dbf文件

java高性能文件读写的工具类?

Java 文件读写操作

java 文件读写时 另一程序正在读写怎么办