java ee io_JAVAEE细细看 进阶 14 - IO总结-Go语言中文社区
IO 總結
1. 字節流
2. 字符流
IO流總覽
字節輸入流
字節輸出流
字符輸入流
字符輸出流
其他流
案例一 集合到文件
將一個ArrayList集合中的字符串數據寫入到文本文件,要求:每個字符串元素作為文件中的一行數據
// 數組
ArrayList list = new ArrayList<>();
list.add("hello");
list.add("world");
list.add("java");
list.add("中國");
list.add("上海");
list.add("北京");
list.add("hello");
list.add("home,my home.");
list.add("我愛你,中國。");
// 字符流 寫
BufferedWriter writer = new BufferedWriter(new FileWriter("myCharStream/fo.txt"));
for(String s: list) {
writer.write(s);
writer.newLine(); //換行
writer.flush();
/*
writer.flush();
字符流必須寫,因為文章可能很長,超出buffer,數據可能出問題
字節流可寫可不寫,因為底層有做特殊的操作
特殊的,
如果在未flush或者close前重新new BufferedWriter()就會把原來的緩沖區覆蓋。
*/
}
writer.close();
案例二 文件到集合
// 創建存儲器
ArrayList list = new ArrayList<>();
// 創建緩存流,字符流 讀
BufferedReader reader = new BufferedReader(new FileReader("myCharStream/fo.txt"));
// 讀
String s;
while ((s = reader.readLine()) != null) {
list.add(s);
}
System.out.println(list);
reader.close();
案例三 點名器
我有一個文件里面存儲了班級同學的姓名,每一個姓名占一行,要求通過程序實現隨點名器
// 存儲器
ArrayList list = new ArrayList<>();
// 緩沖流 字符流 讀
BufferedReader reader = new BufferedReader(new FileReader("myCharStream/fo.txt"));
String s;
while ((s = reader.readLine()) != null) {
list.add(s);
}
reader.close();
// 隨機選一個
Random r = new Random();
int k = r.nextInt(list.size());
System.out.println(list.get(k));
案例四 學生數據寫入到文本文件
把ArrayList集合中的學生數據寫入到文本文件。要求:每一個學生對象的數據作為文件中的一行數據
格式:學號,姓名,年齡,居住地舉例:itheima001,林青霞,30,西安
// 創建數據
ArrayList list = new ArrayList<>();
// 寫數據
BufferedWriter writer = new BufferedWriter(new FileWriter("myCharStream/fo.txt"));
// 填充數據
list.add(new Student("001","張三",12,"廣東"));
list.add(new Student("002","李四",10,"上海"));
list.add(new Student("003","王五",8,"北京"));
list.add(new Student("004","趙柳",7,"深圳"));
list.add(new Student("005","張麗穎",9,"鄭州"));
list.add(new Student("006","王昭君",5,"西安"));
list.add(new Student("007","張飛",18,"成都"));
list.add(new Student("008","趙云",81,"云南"));
for (Student s: list) {
// 編輯內容
String content = s.getSid() + "," + s.getName() + "," + s.getAge() + "," + s.getAddress();
// 寫
writer.write(content);
writer.newLine(); // 換行
writer.flush(); // 刷新
}
// 關閉
writer.close();
案例五 文件到數組
需求:把文本文件中的數據讀取到集合中,并遍歷集合。要求:文件中每一行數據是一個學生對象的成員變量值
舉例:itheima001,林青霞,30,西安
// 創建接收的集合
ArrayList list = new ArrayList<>();
// 讀
BufferedReader reader = new BufferedReader(new FileReader("myCharStream/fo.txt"));
String s;
while ((s = reader.readLine()) != null) {
// 將字符串切為數組
String[] tmp = s.split(",");
if (tmp.length == 4){
// 創建對象,并存到list中
String sid = tmp[0];
String name = tmp[1];
int age = Integer.parseInt(tmp[2]);
String address = tmp[3];
Student stu = new Student(sid, name, age, address);
list.add(stu);
} else {
System.out.println("數據錯誤!!!");
System.out.println(s);
System.out.println("--------");
}
}
// 關閉
reader.close();
// 遍歷
for (Student stu: list) {
System.out.println(stu);
}
案例六
鍵盤錄入5個學生信息(姓名,語文成績,數學成績,英語成績)。要求按照成績總分從高到低寫入文本文件
格式:姓名,語文成績,數學成績,英語成績舉例:林青霞,98,99,100
思路:
1:定義學生類
2:創建TreeSet集合,通過比較器排序進行排序
3:鍵盤錄入學生數據
4:創建學生對象,把鍵盤錄入的數據對應賦值給學生對象的成員變量
5:把學生對象添加到TreeSet集合
6:創建字符緩沖輸出流對象
7:遍歷集合,得到每一個學生對象
8:把學生對象的數據拼接成指定格式的字符串
9:調用字符緩沖輸出流對象的方法寫數據
10:釋放資源
案例七
// 在當前模塊目錄下,有一個“maths.txt”文件,其中的文本內容如下:
// 5+5
// 10-5
// 2*3
// 20/4
// ...
// 每行一個算術表達式,每個式子都是使用加減乘除符號連接的兩個數字,沒有其他數據。 請編寫程序將每個式子的結果計算出來,再寫回這個文件中。程序執行后,文件中的內容為:
// 5+5=10
// 10-5=5
// 2*3=6
// 20/4=5
// ...
import java.io.*;
import java.time.Instant;
import java.util.ArrayList;
public class IODemo {
public static void main(String[] args) throws IOException {
// 源數據 目標路徑
String fileName = "/Users/thor/Desktop/maths.txt";
// 創建源數據
createdTXT(fileName);
// 生成答案數據
String fileName_answer = "/Users/thor/Desktop/maths_answer.txt";
txt_answer(fileName_answer, fileName);
}
// 讀、計算、寫
public static void txt_answer(String fileName, String srcFileName) throws IOException {
// 讀數據
BufferedReader reader = new BufferedReader(new FileReader(srcFileName));
// 寫數據
BufferedWriter writer = new BufferedWriter(new FileWriter(fileName));
// 讀寫
String s;
while ((s = reader.readLine()) != null) {
// 解析
String reslut = analysisData(s);
// 寫
writer.write(reslut);
writer.newLine();
writer.flush();
}
// 關閉
writer.close();
}
// 分析數據
public static String analysisData(String s) {
String[] arr = s.split("[-+*/%]");
// 屏蔽錯誤 - 運算符個數不為 1
if (arr.length != 2) {
return "內容不合法:" + s;
}
// 屏蔽錯誤 - 運算符兩邊不為數字
int fir = 0;
int sec = 0;
try {
fir = Integer.parseInt(arr[0]);
sec = Integer.parseInt(arr[1]);
} catch (NumberFormatException e) {
return "內容不合法:" + s;
}
// 計算
int result = 0;
if (s.contains("+")) { // +
result = fir + sec;
} else if (s.contains("-")) { // -
result = fir - sec;
} else if (s.contains("*")) { // *
result = fir * sec;
} else if (s.contains("/")) { // /
result = fir / sec;
} else if (s.contains("%")) { // %
result = fir % sec;
}
return s + "=" + result;
}
// 創建數據源
public static void createdTXT(String fileName) throws IOException {
// 數據源
ArrayList al = new ArrayList<>();
// 添加數據
al.add("5+5");
al.add("10-5");
al.add("2*3");
al.add("6/2");
al.add("6*3");
al.add("8+2");
al.add("9*9");
al.add("99");
al.add("kk");
al.add("+k");
al.add("+我");
al.add("們+我");
al.add("們+我+");
al.add("們+我+你");
al.add("2=4");
al.add("1+2=4");
al.add("1 +2");
al.add("。+2");
al.add("a+2");
// 寫到文件中
// 字符緩存流
BufferedWriter writer = new BufferedWriter(new FileWriter(fileName));
// 寫
for (String s : al) {
writer.write(s);
writer.newLine();
writer.flush();
}
// 關閉
writer.close();
}
}
總結
以上是生活随笔為你收集整理的java ee io_JAVAEE细细看 进阶 14 - IO总结-Go语言中文社区的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: web开发中canvas是什么意思
- 下一篇: java holder 遍历_复合组件e