Java基礎(chǔ)學習之IO流應(yīng)用案例詳解
一、點名器
需求:
我有一個文件里面存儲了班級同學的姓名,每一個姓名占一行,要求通過程序?qū)崿F(xiàn)隨機點名器
實現(xiàn)步驟:
- 創(chuàng)建字符緩沖輸入流對象
- 創(chuàng)建ArrayList集合對象
- 調(diào)用字符緩沖流對象的方法讀數(shù)據(jù)
- 把讀取到的字符串數(shù)據(jù)存儲到集合中
- 釋放資源
- 使用Randam產(chǎn)生一個隨機數(shù),隨機數(shù)的范圍在:[0,集合的長度]
- 把第6步產(chǎn)生的隨機數(shù)作為索引到ArrayList集合中獲取值
- 把第7步得到的數(shù)據(jù)輸出在控制臺
代碼實現(xiàn):
public class CallNameDemo { public static void main(String[] args) throws IOException { //創(chuàng)建字符緩沖輸入流對象 BufferedReader br = new BufferedReader(new FileReader("myCharStream\\names.txt")); //創(chuàng)建ArrayList集合對象 ArrayList<String> array = new ArrayList<String>(); //調(diào)用字符緩沖輸入流對象的方法讀數(shù)據(jù) String line; while ((line=br.readLine())!=null) { //把讀取到的字符串數(shù)據(jù)存儲到集合中 array.add(line); } //釋放資源 br.close(); //使用Random產(chǎn)生一個隨機數(shù),隨機數(shù)的范圍在:[0,集合的長度) Random r = new Random(); int index = r.nextInt(array.size()); //把第6步產(chǎn)生的隨機數(shù)作為索引到ArrayList集合中獲取值 String name = array.get(index); //把第7步得到的數(shù)據(jù)輸出在控制臺 System.out.println("幸運者是:" + name); } }
二、集合到文件
需求:
把ArrayList集合中的學生數(shù)據(jù)寫入到文本文件。要求:每一個學生對象的數(shù)據(jù)作為文件中的一行數(shù)據(jù),格式:學號,姓名,年齡,居住地 舉例:itheima001,小林,20,青島
實現(xiàn)步驟:
- 定義學生類
- 創(chuàng)建ArrayList集合
- 創(chuàng)建學生對象
- 把學生對象添加到集合中
- 創(chuàng)建字符緩沖輸出流對象
- 遍歷集合,得到每一個學生對象
- 把學生對象的數(shù)據(jù)拼接成指定格式的字符串
- 調(diào)用字符緩沖輸出流對象的方法寫數(shù)據(jù)
- 釋放資源
代碼實現(xiàn):
學生類
public class Student { private String sid; private String name; private int age; private String address; public Student() { } public Student(String sid, String name, int age, String address) { this.sid = sid; this.name = name; this.age = age; this.address = address; } public String getSid() { return sid; } public void setSid(String sid) { this.sid = sid; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } }
測試類:
public class ArrayListToFileDemo { public static void main(String[] args) throws IOException { //創(chuàng)建ArrayList集合 ArrayList<Student> array = new ArrayList<Student>(); //創(chuàng)建學生對象 Student s1 = new Student("itheima001", "小林", 20, "西安"); Student s2 = new Student("itheima002", "小張", 25, "武漢"); Student s3 = new Student("itheima003", "小王", 23, "鄭州"); //把學生對象添加到集合中 array.add(s1); array.add(s2); array.add(s3); //創(chuàng)建字符緩沖輸出流對象 BufferedWriter bw = new BufferedWriter(new FileWriter("myCharStream\\students.txt")); //遍歷集合,得到每一個學生對象 for (Student s : array) { //把學生對象的數(shù)據(jù)拼接成指定格式的字符串 StringBuilder sb = new StringBuilder(); sb.append(s.getSid()).append(",").append(s.getName()).append(",").append(s.ge tAge()).append(",").append(s.getAddress()); //調(diào)用字符緩沖輸出流對象的方法寫數(shù)據(jù) bw.write(sb.toString()); bw.newLine(); bw.flush(); } //釋放資源 bw.close(); } }
三、文件到集合
需求:
把文本文件中的數(shù)據(jù)讀取到集合中,并遍歷集合。要求:文件中每一行數(shù)據(jù)是一個學生對象的成員變量值,舉例:itheima001,小林,23,青島
實現(xiàn)步驟:
- 定義學生類
- 創(chuàng)建字符緩沖輸入流對象
- 創(chuàng)建ArrayList集合對象
- 調(diào)用字符緩沖輸入流對象的方法讀數(shù)據(jù)
- 把讀取到的字符串數(shù)據(jù)用split()進行分隔,得到一個字符串數(shù)組
- 創(chuàng)建學生對象
- 把字符串數(shù)組中的每一個元素取出來對應(yīng)的賦值給學生對象的成員變量值
- 把學生對象添加到集合
- 釋放資源
- 遍歷集合
代碼實現(xiàn):
學生類同上
測試類:
public class FileToArrayListDemo { public static void main(String[] args) throws IOException { //創(chuàng)建字符緩沖輸入流對象 BufferedReader br = new BufferedReader(new FileReader("myCharStream\\students.txt")); //創(chuàng)建ArrayList集合對象 ArrayList<Student> array = new ArrayList<Student>(); //調(diào)用字符緩沖輸入流對象的方法讀數(shù)據(jù) String line; while ((line = br.readLine()) != null) { //把讀取到的字符串數(shù)據(jù)用split()進行分割,得到一個字符串數(shù)組 String[] strArray = line.split(","); //創(chuàng)建學生對象 Student s = new Student(); //把字符串數(shù)組中的每一個元素取出來對應(yīng)的賦值給學生對象的成員變量值 //itheima001,林青霞,30,西安 s.setSid(strArray[0]); s.setName(strArray[1]); s.setAge(Integer.parseInt(strArray[2])); s.setAddress(strArray[3]); //把學生對象添加到集合 array.add(s); } //釋放資源 br.close(); //遍歷集合 for (Student s : array) { System.out.println(s.getSid() + "," + s.getName() + "," + s.getAge() + "," + s.getAddress()); } } }
到此這篇關(guān)于Java基礎(chǔ)學習之IO流應(yīng)用案例詳解的文章就介紹到這了,更多相關(guān)Java IO流內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java中的常用時間日期類總結(jié)(Date、DateFormat)
在Java開發(fā)中處理時間和日期是相當常見的任務(wù),無論是計算日期差異、格式化日期顯示、解析日期字符串還是進行日期計算,都需要一些時間和日期處理的技巧,這篇文章主要給大家介紹了關(guān)于Java中常用時間日期類(Date、DateFormat)的相關(guān)資料,需要的朋友可以參考下2024-08-08Java中List使用stream流轉(zhuǎn)成map的幾種方式詳解
Stream是Java8中處理集合的關(guān)鍵抽象概念,它可以指定你希望對集合進行的操作,可以執(zhí)行非常復(fù)雜的查找、過濾和映射數(shù)據(jù)等操作,下面這篇文章主要給大家介紹了關(guān)于Java中List使用stream流轉(zhuǎn)成map的幾種方式,需要的朋友可以參考下2023-04-04SpringBoot整合Minio實現(xiàn)上傳文件的完整步驟記錄
MinIO是一個基于Apache License v2.0開源協(xié)議的對象存儲服務(wù),它兼容亞馬遜S3云存儲服務(wù)接口,非常適合于存儲大容量非結(jié)構(gòu)化的數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于SpringBoot整合Minio實現(xiàn)上傳文件的完整步驟,需要的朋友可以參考下2022-05-05java?String到底有多長?String超出長度該如何解決
在Java中,由于字符串常量池的存在,String常量長度限制取決于String常量在常量池中的存儲大小,下面這篇文章主要給大家介紹了關(guān)于java?String到底有多長?String超出長度該如何解決的相關(guān)資料,需要的朋友可以參考下2023-01-01