Java的io流

1.FileWriter类

  IO流的流入、流出是以Java程序为基准,进入程序为Input,出程序为Output。

1.1.构造方法

Filewriter类

构造方法

参数

说明

public FileWriter(String fileName) 表示与系统有关的文件名 根据给定的文件名,构造一个 FileWriter 对象。
public FileWriter(String fileName, boolean append) append如果为 true, 数据写入文件末尾  往给定的文件名中,追加数据

1.2.成员方法

Filewriter类

父类继承

成员方法

参数

说明

 java.io.Writer;  public void write(String str)  str是要写入的字符串  根据给定的文件名,构造一个 FileWriter 对象。
 java.io.OutputStreamWriter;  public void flush()    刷新该流对象的缓冲
 java.io.OutputStreamWriter;  public void close()    关闭流对象
 java.io.OutputStreamWriter;  public String getEncoding()    返回流使用的字符编码名称

  简单实例:往文件中保存“hello world.”字符串,文件不存在时创建该文件,文件存在时覆盖原有文件内容。

 1 FileWriter fw = new FileWriter("ioflow.txt");
 2 fw.write("hello");
 3 fw.write(" ");
 4 fw.write("world");
 5 fw.write(".");
 6 
 7 fw.flush();
 8 String encode = fw.getEncoding();
 9 System.out.println(encode);  //GBK
10 fw.close();

   流关闭后,调用了getEncoding()方法,返回null。

1 fw.close();
2 encode = fw.getEncoding();
3 System.out.println(encode);  //null
write方法汇总

父类继承

成员方法

参数

说明

 java.io.Writer;  public void write(String str)  要写入的字符串  写入字符串
 java.io.Writer;  public void write(char[] cbuf)  要写入的字符数组  写入字符数组
 java.io.OutputStreamWriter;  public void write(String str, int off, int len)  字符串的起始下标,长度  写入字符串的一部分
 java.io.OutputStreamWriter;  public void write(char[] cbuf, int off, int len)    写入字符数组的一部分
 java.io.OutputStreamWriter;  public void write(int c)  要写入字符的int  写入单个字符

2.FileReader类

 2.1.构造方法

FileReader类

构造方法

说明

public FileReader(String fileName)  在给定文件名的情况下,创建一个新的FileReader对象。

2.2.成员方法

FileReader类

父类继承

成员方法

返回

说明

 java.io.InputStreamReader;  public int read()  读取字符的个数  读取单个字符

  读取一个文件

1 FileReader fr = new FileReader("Reader.txt");
2 
3 int ch;
4 while ((ch = fr.read()) != -1) {
5     System.out.print((char)ch);
6 }
7 
8 fr.close();
FileReader类

父类继承

成员方法

参数

返回

说明

 java.io.Reader;  public int read(char[] cbuf)  保存从对象读取的字符,数组的长度影响了循环次数 读取到的字符数  将字符读入数组

  读取一个文件

1 FileReader fr = new FileReader("Reader.txt");
2 char[] chs = new char[1024];
3 int len;
4 while ((len = fr.read(chs)) != -1) {
5     String str = new String(chs, 0, len);
6     System.out.print(str);
7 }

3.缓冲流 BufferedReader

3.1.构造方法

BufferedReader类

构造方法

说明

 public BufferedReader(Reader in)  创建一个默认大小输入缓冲区的缓冲字符输入流。可以使用FileReader对象来完成。
1 BufferedReader br = new BufferedReader(new FileReader(filename));

3.2.成员方法

BufferedReader类

父类继承

成员方法

参数

返回

说明

 自有  public int read()  空  读入的字符  读取单个字符
 自有  public int read(char[] cbuf, int off, int len)  cbuf接收读取字符的字符数组,offset写入字符数组的起始下标,len写入的长度  读取的字符数,到达流末尾返回-1  将字符读入数组的某一部分
 自有  public String readLine()  空  不含终止符的行内容,到达流末尾返回null  读取一个文本行
1 String line;
2 while ((line = br.readLine()) != null) {
3     bw.write(line);
4     bw.newLine();
5 }
6 
7 bw.close();
8 br.close();
扫描二维码关注公众号,回复: 95002 查看本文章

4.缓冲流 BufferedWriter

4.1.构造方法

BufferedWriter类

构造方法

说明

 public BufferedWriter(Writer out)  创建一个默认大小输出缓冲区的缓冲字符输出流。可以使用FileWriter对象来完成。 
1 BufferedWriter bw = new BufferedWriter(new FileWriter(fileName, true)); // 追加写入
2 BufferedWriter bw = new BufferedWriter(new FileWriter(filename)); // 覆盖原有内容

 4.2.成员方法

BufferedWriter类

父类继承

成员方法

参数

返回

说明

 自有  public void newLine()      写入一个行分割符
 自有  public void write(String s, int off, int len)      写入字符串的某一部分
 java.io.Writer;  public void write(char[] cbuf)  要写入的字符数组    写入字符数组
 java.io.Writer;  public void write(String str)  要写入的字符串    写入字符串

5.综合练习

5.1.综合练习1

  使用学习过的写入文件、读取文件的5种方法,完成字符文件的复制操作。

 1 package day10;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.BufferedWriter;
 5 import java.io.FileNotFoundException;
 6 import java.io.FileReader;
 7 import java.io.FileWriter;
 8 import java.io.IOException;
 9 import java.io.Writer;
10 
11 public class FiveMethodCopyFile04 {
12     public static void main(String[] args) throws IOException {
13         String src = "dir10\\fivePlus\\src.txt";
14         String des = "dir10\\fivePlus\\des";
15 
16         copy1(src, des + 41 + ".txt");
17         copy2(src, des + 42 + ".txt");
18         copy3(src, des + 43 + ".txt");
19         copy4(src, des + 44 + ".txt");
20         copy5(src, des + 45 + ".txt");
21     }
22 
23     // 高效流,每次获取一行
24     public static void copy5(String src, String des) throws IOException {
25         BufferedReader br = new BufferedReader(new FileReader(src));
26         BufferedWriter bw = new BufferedWriter(new FileWriter(des));
27 
28         String line;
29         while ((line = br.readLine()) != null) {
30             bw.write(line);
31             bw.newLine();
32         }
33 
34         bw.close();
35         br.close();
36     }
37 
38     // 高效流,一次获取的是字符数组
39     public static void copy4(String src, String des) throws IOException {
40         BufferedReader br = new BufferedReader(new FileReader(src));
41         BufferedWriter bw = new BufferedWriter(new FileWriter(des));
42 
43         char[] chs = new char[4096];
44         int len;
45         while ((len = br.read(chs)) != -1) {
46             bw.write(chs, 0, len);
47         }
48 
49         bw.close();
50         br.close();
51     }
52 
53     // 高效流,一次获取一个字符
54     public static void copy3(String src, String des) throws IOException {
55         BufferedReader br = new BufferedReader(new FileReader(src));
56         BufferedWriter bw = new BufferedWriter(new FileWriter(des));
57 
58         int ch;
59         while ((ch = br.read()) != -1) {
60             bw.write(ch);
61         }
62 
63         bw.close();
64         br.close();
65     }
66 
67     // 普通流,一次获取一个字符串
68     public static void copy2(String src, String des) throws IOException {
69         FileReader fr = new FileReader(src);
70         FileWriter fw = new FileWriter(des);
71 
72         char[] chs = new char[4096];
73         int len;
74         while ((len = fr.read(chs)) != -1) {
75             fw.write(chs, 0, len);
76         }
77 
78         fw.close();
79         fr.close();
80     }
81 
82     // 普通流, 一次获取一个字符
83     public static void copy1(String src, String des) throws IOException {
84         FileReader fr = new FileReader(src);
85         FileWriter fw = new FileWriter(des);
86 
87         int ch;
88         while ((ch = fr.read()) != -1) {
89             fw.write(ch);
90         }
91 
92         fw.close();
93         fr.close();
94     }
95 }

5.2.综合练习2

  使用IO重写学生管理管理系统。除了两个类文件,还需要一个保存sn序号的文件和一个保存信息的文件。

主类

  1 public class StudentManager {
  2     public static String SCHOOL = "heima";
  3     public static int sn;
  4     public static Scanner sc = new Scanner(System.in);
  5     public static String filename = "day11_smIO\\st.txt";
  6     public static String snPath = "day11_smIO\\sn.txt";
  7 
  8     public static void main(String[] args) throws IOException {
  9         ArrayList<Student> al = new ArrayList<Student>();
 10 
 11         String op = "0";
 12         while (true) {
 13             // Runtime.getInstance().exec("cls");
 14             System.out.println("----------学生管理系统----------");
 15             System.out.println("1,查看全部学生信息");
 16             System.out.println("2,添加学生信息");
 17             System.out.println("3,删除学生信息");
 18             System.out.println("4,修改学生信息");
 19             System.out.println("5,查看某个学生");
 20             System.out.println("6,退出程序");
 21             System.out.print("选择相应操作:   ");
 22             op = sc.nextLine().trim();
 23             switch (op) {
 24             case "1": // 查看全部学生信息
 25                 selectAllStudent(al);
 26                 break;
 27             case "2": // 添加学生信息
 28                 addStudent(al);
 29                 break;
 30             case "3": // 删除学生信息
 31                 delStudent(al);
 32                 break;
 33             case "4": // 修改学生信息
 34                 updateStudent(al);
 35                 break;
 36             case "5": // 查看某个学生
 37                 selectStudent(al);
 38                 break;
 39             case "6": // 退出程序
 40                 System.out.println("欢迎使用");
 41                 System.exit(0);
 42                 break;
 43             default:
 44                 System.out.println("选择错误");
 45                 break;
 46             }
 47         }
 48 
 49     } // main over
 50     
 51     // 初始化sn
 52     public static int getSN(String snPath) throws IOException{
 53         BufferedReader br = new BufferedReader(new FileReader(snPath));
 54         String tmp = br.readLine().trim();
 55         int sn = Integer.parseInt(tmp);
 56         br.close();
 57         return sn;
 58     }
 59     
 60     // 保存sn
 61     public static void setSN(int sn, String snPath) throws IOException{
 62         BufferedWriter bw = new BufferedWriter(new FileWriter(snPath));
 63         bw.write(String.valueOf(sn));
 64         
 65         bw.flush();
 66         bw.close();
 67     }
 68 
 69     // 初始化集合
 70     public static void readFile(String filename, ArrayList<Student> al) throws IOException {
 71         al.clear();
 72         
 73         BufferedReader br = new BufferedReader(new FileReader(filename));
 74         String[] tmp;
 75         Student stu;
 76         ;
 77         String line;
 78         while ((line = br.readLine()) != null) {
 79             tmp = line.split(",");
 80             // stu = new Student(sid, name, age, priv)
 81             stu = new Student(tmp[0].trim(), tmp[1].trim(), tmp[2].trim(), tmp[3].trim());
 82             al.add(stu);
 83         }
 84 
 85         br.close();
 86     }
 87 
 88     // 集合信息存盘
 89     public static void writeFile(String filename, ArrayList<Student> al) throws IOException {
 90         BufferedWriter bw = new BufferedWriter(new FileWriter(filename));
 91         StringBuilder tmp = new StringBuilder("");
 92         for (int i = 0; i < al.size(); i++) {
 93             tmp.append(al.get(i).getSid()).append(", ");
 94             tmp.append(al.get(i).getName()).append(", ");
 95             tmp.append(al.get(i).getAge()).append(", ");
 96             tmp.append(al.get(i).getPriv());
 97             bw.write(tmp.toString());
 98             bw.newLine();
 99             bw.flush();
100             tmp.delete(0, tmp.length());
101         }
102         
103         bw.close();
104     }
105 
106     // print student
107     public static void printStudent(int i, ArrayList<Student> al) {
108         String name = al.get(i).getName();
109         String age = al.get(i).getAge();
110         String sid = al.get(i).getSid();
111         String priv = al.get(i).getPriv();
112 
113         System.out.println(name + "\t" + age + "\t" + sid + "\t\t" + priv);
114     }
115 
116     // 添加学生
117     public static void addStudent(ArrayList<Student> al) throws IOException {
118         // 初始化集合
119         readFile(filename, al);
120         
121         System.out.print("姓名: ");
122         String name = sc.nextLine().trim();
123         System.out.print("年龄: ");
124         String age = sc.nextLine().trim();
125         System.out.print("籍贯: ");
126         String priv = sc.nextLine().trim();
127         
128         // 初始化sn
129         sn = getSN(snPath);
130         sn++;
131         String sid = SCHOOL + sn;
132         sid = sid.replace("heima25", "heima00");
133 
134         Student ss = new Student(sid, name, age, priv);
135         al.add(ss);
136 
137         System.out.println("当前系统中学生总数: " + al.size() + " ,新添加学生编号 " + sid);
138         // 保存sn
139         setSN(sn, snPath);
140         writeFile(filename, al);
141     }
142 
143     // 删除学生
144     public static void delStudent(ArrayList<Student> al) throws IOException {
145         // 初始化集合
146         readFile(filename, al);
147         
148         System.out.print("输入需要删除的学生编号:");
149         String sid = sc.nextLine().trim();
150         for (int i = 0; i < al.size(); i++) {
151             if (al.get(i).getSid().equalsIgnoreCase(sid)) {
152                 System.out.println("即将删除学生信息,编号 " + al.get(i).getSid());
153                 al.remove(i);
154                 System.out.println("删除学生信息: 编号" + sid + ",已清除");
155                 
156                 // 存盘
157                 writeFile(filename, al);
158                 return;
159             }
160         }
161 
162         System.out.println(sid + "没有找到。");
163     }
164 
165     // 修改学生信息
166     public static void updateStudent(ArrayList<Student> al) throws IOException {
167         // 初始化集合
168         readFile(filename, al);
169                 
170         System.out.print("输入即将修改的学生编号: ");
171         String sid = sc.nextLine().trim();
172         int i;
173         for (i = 0; i < al.size(); i++) {
174             if (al.get(i).getSid().equalsIgnoreCase(sid)) {
175                 break;
176             }
177             if (al.size() - 1 == i) {
178                 System.out.println("输入的学生编号不存在!");
179                 return;
180             }
181         }
182 
183         String op = "";
184         System.out.println("选择修改的范围:");
185         System.out.println("\t1,修改姓名");
186         System.out.println("\t2,修改年龄");
187         System.out.println("\t3,修改籍贯");
188         System.out.println("\t4,以上全部修改");
189         System.out.println("\t5,放弃修改");
190         System.out.print("选择操作的序号:");
191         op = sc.nextLine().trim();
192 
193         String name = null;
194         String age = null;
195         String pri = null;
196         switch (op) {
197         case "1": // 修改姓名
198             System.out.print("新的姓名");
199             name = sc.nextLine().trim();
200             break;
201         case "2": // 修改年龄
202             System.out.print("新的年龄");
203             age = sc.nextLine().trim();
204             break;
205         case "3": // 修改籍贯
206             System.out.print("新的籍贯");
207             pri = sc.nextLine().trim();
208             break;
209         case "4": // 全部修改
210             System.out.print("新的姓名");
211             name = sc.nextLine().trim();
212             System.out.print("新的年龄");
213             age = sc.nextLine().trim();
214             System.out.print("新的籍贯");
215             pri = sc.nextLine().trim();
216             break;
217         case "5": // 放弃修改
218             System.out.println("退出修改");
219             break;
220         default:
221             System.out.println("选择错误");
222             break;
223         }
224 
225         if (null != name) {
226             al.get(i).setName(name);
227         }
228         if (null != age) {
229             al.get(i).setAge(age);
230         }
231         if (null != pri) {
232             al.get(i).setPriv(pri);
233         }
234 
235         // 存盘
236         writeFile(filename, al);
237     }
238 
239     // 选择一个学生
240     public static void selectStudent(ArrayList<Student> al) throws IOException {
241         // 初始化集合
242         readFile(filename, al);
243         
244         System.out.print("输入学生编号:  ");
245         String sid = sc.nextLine().trim();
246         int i = 0;
247 
248         for (i = 0; i < al.size(); i++) {
249             if (al.get(i).getSid().equalsIgnoreCase(sid)) {
250                 printStudent(i, al);
251                 return;
252             }
253         }
254 
255         System.out.println(sid + " 学生编号没有找到");
256     }
257     // 查看所有学生
258     public static void selectAllStudent(ArrayList<Student> al) throws IOException {
259         // 选择所有学生,打印输出
260         readFile(filename, al);
261         
262         if (0 == al.size()) {
263             System.out.println("当前系统保存的学生总数: " + al.size());
264             return;
265         }
266 
267         System.out.println("姓名\t年龄\t编号\t\t\t籍贯");
268         for (int i = 0; i < al.size(); i++) {
269             printStudent(i, al);
270         }
271     }
272 }
View Code

 学生类

 1 public class Student {
 2     private String sid;
 3     private String name;
 4     private String age;
 5     private String priv;
 6     
 7     public Student() {
 8     }
 9     public Student(String sid, String name, String age, String priv) {
10         this.sid = sid;
11         this.name = name;
12         this.age = age;
13         this.priv = priv;
14     }
15     public String getSid() {
16         return sid;
17     }
18     public void setSid(String sid) {
19         this.sid = sid;
20     }
21     public String getName() {
22         return name;
23     }
24     public void setName(String name) {
25         this.name = name;
26     }
27     public String getAge() {
28         return age;
29     }
30     public void setAge(String age) {
31         this.age = age;
32     }
33     public String getPriv() {
34         return priv;
35     }
36     public void setPriv(String priv) {
37         this.priv = priv;
38     }
39 }
View Code

猜你喜欢

转载自www.cnblogs.com/argor/p/8975578.html