欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java字節(jié)緩存流的構造方法之文件IO流

 更新時間:2022年04月13日 14:22:32   作者:一計之長  
這篇文章主要介紹了Java字節(jié)緩存流的構造方法之文件IO流,同時也介紹了字符流中的一些相關的內容,并且通過大量的案例供大家理解。最后通過一些經典的案例幫助大家對前面所學的知識做了一個綜合的應用,需要的朋友可以參考一下

前言:

我們從上篇文章開始給大家介紹Java中IO流的相關知識,本文接著上文的內容,接續(xù)給大家介紹Java文件的讀入讀出流。

1.字節(jié)緩沖流

1.1字節(jié)緩沖流構造方法

  • 字節(jié)緩沖流介紹
  • ??lBufferOutputStream??:該類實現(xiàn)緩沖輸出流。 通過設置這樣的輸出流,應用程序可以向底層輸出流寫入字節(jié),而不必為寫入的每個字節(jié)導致底層系統(tǒng)的調用
  • ??lBufferedInputStream???:創(chuàng)建??BufferedInputStream??將創(chuàng)建一個內部緩沖區(qū)數(shù)組。 當從流中讀取或跳過字節(jié)時,內部緩沖區(qū)將根據(jù)需要從所包含的輸入流中重新填充,一次很多字節(jié)。
  • 構造方法:

Java之文件IO流詳解完結_釋放資源

  • 示例代碼
public class BufferStreamDemo {
public static void main(String[] args) throws IOException {
//字節(jié)緩沖輸出流:BufferedOutputStream(OutputStream out)

BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("myByteStream\\bos.txt"));
//寫數(shù)據(jù)
bos.write("hello\r\n".getBytes());
bos.write("world\r\n".getBytes());
//釋放資源
bos.close();
//字節(jié)緩沖輸入流:BufferedInputStream(InputStream in)
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("myByteStream\\bos.txt"));

//一次讀取一個字節(jié)數(shù)組數(shù)據(jù)
byte[] bys = new byte[1024];
int len;
while ((len=bis.read(bys))!=-1) {
System.out.print(new String(bys,0,len));
}

//釋放資源
bis.close();
}
}

大家在運行該代碼的時候,將相應的各種包導進去,另外將代碼里面相應的路徑換成讀者自己的,代碼就可以完美運行了,可以看看其效果。

1.2字節(jié)流復制視頻

  • 案例需求

把“E:\\yijizhichang\\字節(jié)流復制圖片.avi”復制到模塊目錄下的“字節(jié)流復制圖片.avi”

  • 實現(xiàn)步驟
    • 根據(jù)數(shù)據(jù)源創(chuàng)建字節(jié)輸入流對象
    • 根據(jù)目的地創(chuàng)建字節(jié)輸出流對象
    • 讀寫數(shù)據(jù),復制視頻
    • 釋放資源
  • 代碼實現(xiàn)
public class CopyAviDemo {
public static void main(String[] args) throws IOException {
//記錄開始時間
long startTime = System.currentTimeMillis();

//記錄結束時間
long endTime = System.currentTimeMillis();
System.out.println("共耗時:" + (endTime - startTime) + "毫秒");
}

//字節(jié)緩沖流一次讀寫一個字節(jié)數(shù)組
public static void method4() throws IOException {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("E:\\yijizhichang\\字節(jié)流復制圖片.avi"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("myByteStream\\字節(jié)流復制圖片.avi"));

byte[] bys = new byte[1024];
int len;
while ((len=bis.read(bys))!=-1) {
bos.write(bys,0,len);
}

bos.close();
bis.close();
}

//字節(jié)緩沖流一次讀寫一個字節(jié)
public static void method3() throws IOException {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("E:\\yijizhichang\\字節(jié)流復制圖片.avi"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("myByteStream\\字節(jié)流復制圖片.avi"));

int by;
while ((by=bis.read())!=-1) {
bos.write(by);
}

bos.close();
bis.close();
}


//基本字節(jié)流一次讀寫一個字節(jié)數(shù)組
public static void method2() throws IOException {
//E:\\yijizhichang\\字節(jié)流復制圖片.avi
//模塊目錄下的 字節(jié)流復制圖片.avi
FileInputStream fis = new FileInputStream("E:\\yijizhichang\\字節(jié)流復制圖片.avi");
FileOutputStream fos = new FileOutputStream("myByteStream\\字節(jié)流復制圖片.avi");

byte[] bys = new byte[1024];
int len;
while ((len=fis.read(bys))!=-1) {
fos.write(bys,0,len);
}

fos.close();
fis.close();
}

//基本字節(jié)流一次讀寫一個字節(jié)
public static void method1() throws IOException {
//E:\\yijizhichang\\字節(jié)流復制圖片.avi
//模塊目錄下的 字節(jié)流復制圖片.avi
FileInputStream fis = new FileInputStream("E:\\yijizhichang\\字節(jié)流復制圖片.avi");
FileOutputStream fos = new FileOutputStream("myByteStream\\字節(jié)流復制圖片.avi");

int by;
while ((by=fis.read())!=-1) {
fos.write(by);
}

fos.close();
fis.close();
}
}

2.字符流

2.1為什么會出現(xiàn)字符流

  • 字符流的介紹

由于字節(jié)流操作中文不是特別的方便,所以Java就提供字符流

字符流 = 字節(jié)流 + 編碼表

  • 中文的字節(jié)存儲方式

用字節(jié)流復制文本文件時,文本文件也會有中文,但是沒有問題,原因是最終底層操作會自動進行字節(jié)拼接成中文,如何識別是中文的呢?

漢字在存儲的時候,無論選擇哪種編碼存儲,第一個字節(jié)都是負數(shù)

2.2編碼表

  • 什么是字符集

是一個系統(tǒng)支持的所有字符的集合,包括各國家文字、標點符號、圖形符號、數(shù)字等

l計算機要準確的存儲和識別各種字符集符號,就需要進行字符編碼,一套字符集必然至少有一套字符編碼。常見字符集有ASCII字符集、GBXXX字符集、Unicode字符集等

  • 常見的字符集
  • ASCII字符集:

lASCII:是基于拉丁字母的一套電腦編碼系統(tǒng),用于顯示現(xiàn)代英語,主要包括控制字符(回車鍵、退格、換行鍵等)和可顯示字符(英文大小寫字符、阿拉伯數(shù)字和西文符號)

基本的ASCII字符集,使用7位表示一個字符,共128字符。ASCII的擴展字符集使用8位表示一個字符,共256字符,方便支持歐洲常用字符。是一個系統(tǒng)支持的所有字符的集合,包括各國家文字、標點符號、圖形符號、數(shù)字等

  • GBXXX字符集:

GBK:最常用的中文碼表。是在GB2312標準基礎上的擴展規(guī)范,使用了雙字節(jié)編碼方案,共收錄了21003個漢字,完全兼容GB2312標準,同時支持繁體漢字以及日韓漢字等

  • Unicode字符集

UTF-8編碼:可以用來表示Unicode標準中任意字符,它是電子郵件、網頁及其他存儲或傳送文字的應用 中,優(yōu)先采用的編碼?;ヂ?lián)網工程工作小組(IETF)要求所有互聯(lián)網協(xié)議都必須支持UTF-8編碼。它使用一至四個字節(jié)為每個字符編碼

編碼規(guī)則:

128個US-ASCII字符,只需一個字節(jié)編碼

拉丁文等字符,需要二個字節(jié)編碼

大部分常用字(含中文),使用三個字節(jié)編碼

其他極少使用的Unicode輔助字符,使用四字節(jié)編碼

2.3字符串中的編碼解碼問題

  • 相關方法

Java之文件IO流詳解完結_字節(jié)流_02

  • 代碼演示
public class StringDemo {
public static void main(String[] args) throws UnsupportedEncodingException {
//定義一個字符串
String s = "中國";

byte[] bys = s.getBytes("GBK"); //[-42, -48, -71, -6]
System.out.println(Arrays.toString(bys));
String ss = new String(bys,"GBK");
System.out.println(ss);
}
}

2.4字符流中的編碼解碼問題

  • 字符流中和編碼解碼問題相關的兩個類
  • ??InputStreamReader??:是從字節(jié)流到字符流的橋梁

它讀取字節(jié),并使用指定的編碼將其解碼為字符

它使用的字符集可以由名稱指定,也可以被明確指定,或者可以接受平臺的默認字符集

  • OutputStreamWriter:是從字符流到字節(jié)流的橋梁

是從字符流到字節(jié)流的橋梁,使用指定的編碼將寫入的字符編碼為字節(jié)

它使用的字符集可以由名稱指定,也可以被明確指定,或者可以接受平臺的默認字符集

  • 構造方法

Java之文件IO流詳解完結_輸出流_03

  • 代碼演示
public class ConversionStreamDemo {
public static void main(String[] args) throws IOException {
//OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("myCharStream\\osw.txt"));
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("myCharStream\\osw.txt"),"GBK");
osw.write("中國");
osw.close();

//InputStreamReader isr = new InputStreamReader(new FileInputStream("myCharStream\\osw.txt"));
InputStreamReader isr = new InputStreamReader(new FileInputStream("myCharStream\\osw.txt"),"GBK");
//一次讀取一個字符數(shù)據(jù)
int ch;
while ((ch=isr.read())!=-1) {
System.out.print((char)ch);
}
isr.close();
}
}

2.5字符流寫數(shù)據(jù)的5種方式

  • 方法介紹

Java之文件IO流詳解完結_釋放資源_04

  • 刷新和關閉的方法

Java之文件IO流詳解完結_釋放資源_05

  • 代碼演示
public class OutputStreamWriterDemo {
public static void main(String[] args) throws IOException {
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("myCharStream\\osw.txt"));

char[] chs = {'a', 'b', 'c', 'd', 'e'};
osw.write("abcde", 1, 3);

//釋放資源
osw.close();
}
}

2.6字符流讀數(shù)據(jù)的2種方式

  • 方法介紹

Java之文件IO流詳解完結_字節(jié)流_06

  • 代碼演示
public class InputStreamReaderDemo {
public static void main(String[] args) throws IOException {

InputStreamReader isr = new InputStreamReader(new FileInputStream("myCharStream\\ConversionStreamDemo.java"));

char[] chs = new char[1024];
int len;
while ((len = isr.read(chs)) != -1) {
System.out.print(new String(chs, 0, len));
}

//釋放資源
isr.close();
}
}

2.7字符流復制Java文件

  • 案例需求

把模塊目錄下的“??ConversionStreamDemo.java???” 復制到模塊目錄下的“??Copy.java??”

  • 實現(xiàn)步驟
    • 根據(jù)數(shù)據(jù)源創(chuàng)建字符輸入流對象
    • 根據(jù)目的地創(chuàng)建字符輸出流對象
    • 讀寫數(shù)據(jù),復制文件
    • 釋放資源
  • 代碼實現(xiàn)
public class CopyJavaDemo01 {
public static void main(String[] args) throws IOException {
//根據(jù)數(shù)據(jù)源創(chuàng)建字符輸入流對象
InputStreamReader isr = new InputStreamReader(new FileInputStream("myCharStream\\ConversionStreamDemo.java"));
//根據(jù)目的地創(chuàng)建字符輸出流對象
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("myCharStream\\Copy.java"));

//讀寫數(shù)據(jù),復制文件

//一次讀寫一個字符數(shù)組數(shù)據(jù)
char[] chs = new char[1024];
int len;
while ((len=isr.read(chs))!=-1) {
osw.write(chs,0,len);
}

//釋放資源
osw.close();
isr.close();
}
}

2.8字符流復制Java文件改進版

  • 案例需求

使用便捷流對象,把模塊目錄下的“??ConversionStreamDemo.java???” 復制到模塊目錄下的“??Copy.java??”

  • 實現(xiàn)步驟
    • 根據(jù)數(shù)據(jù)源創(chuàng)建字符輸入流對象
    • 根據(jù)目的地創(chuàng)建字符輸出流對象
    • 讀寫數(shù)據(jù),復制文件
    • 釋放資源
  • 代碼實現(xiàn)
public class CopyJavaDemo02 {
public static void main(String[] args) throws IOException {
//根據(jù)數(shù)據(jù)源創(chuàng)建字符輸入流對象
FileReader fr = new FileReader("myCharStream\\ConversionStreamDemo.java");
//根據(jù)目的地創(chuàng)建字符輸出流對象
FileWriter fw = new FileWriter("myCharStream\\Copy.java");
char[] chs = new char[1024];
int len;
while ((len=fr.read(chs))!=-1) {
fw.write(chs,0,len);
}

//釋放資源
fw.close();
fr.close();
}
}

2.9字符緩沖流

  • 字符緩沖流介紹
    • ??BufferedWriter??:將文本寫入字符輸出流,緩沖字符,以提供單個字符,數(shù)組和字符串的高效寫入,可以指定緩沖區(qū)大小,或者可以接受默認大小。默認值足夠大,可用于大多數(shù)用途
    • ??BufferedReader??:從字符輸入流讀取文本,緩沖字符,以提供字符,數(shù)組和行的高效讀取,可以指定緩沖區(qū)大小,或者可以使用默認大小。 默認值足夠大,可用于大多數(shù)用途
  • 構造方法

Java之文件IO流詳解完結_輸出流_07

  • 代碼演示
public class BufferedStreamDemo01 {
public static void main(String[] args) throws IOException {
//BufferedWriter(Writer out)
BufferedWriter bw = new BufferedWriter(new FileWriter("myCharStream\\bw.txt"));
bw.write("hello\r\n");
bw.write("world\r\n");
bw.close();

//BufferedReader(Reader in)
BufferedReader br = new BufferedReader(new FileReader("myCharStream\\bw.txt"));

//一次讀取一個字符數(shù)據(jù)
//一次讀取一個字符數(shù)組數(shù)據(jù)
char[] chs = new char[1024];
int len;
while ((len=br.read(chs))!=-1) {
System.out.print(new String(chs,0,len));
}

br.close();
}
}

2.10字符緩沖流復制Java文件

  • 案例需求

把模塊目錄下的??ConversionStreamDemo.java??? 復制到模塊目錄下的?? Copy.java??

  • 實現(xiàn)步驟
    • 根據(jù)數(shù)據(jù)源創(chuàng)建字符緩沖輸入流對象
    • 根據(jù)目的地創(chuàng)建字符緩沖輸出流對象
    • 讀寫數(shù)據(jù),復制文件,使用字符緩沖流特有功能實現(xiàn)
    • 釋放資源
  • 代碼實現(xiàn)
public class CopyJavaDemo01 {
public static void main(String[] args) throws IOException {
//根據(jù)數(shù)據(jù)源創(chuàng)建字符緩沖輸入流對象
BufferedReader br = new BufferedReader(new FileReader("myCharStream\\ConversionStreamDemo.java"));
//根據(jù)目的地創(chuàng)建字符緩沖輸出流對象
BufferedWriter bw = new BufferedWriter(new FileWriter("myCharStream\\Copy.java"));

//一次讀寫一個字符數(shù)組數(shù)據(jù)
char[] chs = new char[1024];
int len;
while ((len=br.read(chs))!=-1) {
bw.write(chs,0,len);
}

//釋放資源
bw.close();
br.close();
}
}

2.11字符緩沖流特有功能

  • 方法介紹

   BufferedWriter

Java之文件IO流詳解完結_釋放資源_08

  • 代碼演示
public class BufferedStreamDemo02 {
public static void main(String[] args) throws IOException {

//創(chuàng)建字符緩沖輸出流
BufferedWriter bw = new BufferedWriter(new FileWriter("myCharStream\\bw.txt"));

//寫數(shù)據(jù)
for (int i = 0; i < 10; i++) {
bw.write("hello" + i);
//bw.write("\r\n");
bw.newLine();
bw.flush();
}

//釋放資源
bw.close();

//創(chuàng)建字符緩沖輸入流
BufferedReader br = new BufferedReader(new FileReader("myCharStream\\bw.txt"));

String line;
while ((line=br.readLine())!=null) {
System.out.println(line);
}

br.close();
}
}

2.12字符緩沖流特有功能復制Java文件

  • 案例需求

使用特有功能把模塊目錄下的ConversionStreamDemo.java 復制到模塊目錄下的?? Copy.java??

  • 實現(xiàn)步驟
    • 根據(jù)數(shù)據(jù)源創(chuàng)建字符緩沖輸入流對象
    • 根據(jù)目的地創(chuàng)建字符緩沖輸出流對象
    • 讀寫數(shù)據(jù),復制文件,使用字符緩沖流特有功能實現(xiàn)
    • 釋放資源
  • 代碼實現(xiàn)
public class CopyJavaDemo02 {
public static void main(String[] args) throws IOException {
//根據(jù)數(shù)據(jù)源創(chuàng)建字符緩沖輸入流對象
BufferedReader br = new BufferedReader(new FileReader("myCharStream\\ConversionStreamDemo.java"));
//根據(jù)目的地創(chuàng)建字符緩沖輸出流對象
BufferedWriter bw = new BufferedWriter(new FileWriter("myCharStream\\Copy.java"));

//讀寫數(shù)據(jù),復制文件
//使用字符緩沖流特有功能實現(xiàn)
String line;
while ((line=br.readLine())!=null) {
bw.write(line);
bw.newLine();
bw.flush();
}

//釋放資源
bw.close();
br.close();
}
}

2.13IO流小結

  • 字節(jié)流

Java之文件IO流詳解完結_字節(jié)流_09

  • 字符流

Java之文件IO流詳解完結_Java SE_10

3練習案例

3.1集合到文件

  • 案例需求

把文本文件中的數(shù)據(jù)讀取到集合中,并遍歷集合。要求:文件中每一行數(shù)據(jù)是一個集合元素

  • 實現(xiàn)步驟
    • 創(chuàng)建字符緩沖輸入流對象
    • 創(chuàng)建ArrayList集合對象
    • 調用字符緩沖輸入流對象的方法讀數(shù)據(jù)
    • 把讀取到的字符串數(shù)據(jù)存儲到集合中
    • 釋放資源
    • 遍歷集合
  • 代碼實現(xiàn)
public class TxtToArrayListDemo {
public static void main(String[] args) throws IOException {
//創(chuàng)建字符緩沖輸入流對象
BufferedReader br = new BufferedReader(new FileReader("myCharStream\\array.txt"));
//創(chuàng)建ArrayList集合對象
ArrayList<String> array = new ArrayList<String>();

//調用字符緩沖輸入流對象的方法讀數(shù)據(jù)
String line;
while ((line=br.readLine())!=null) {
//把讀取到的字符串數(shù)據(jù)存儲到集合中
array.add(line);
}
//釋放資源
br.close();
//遍歷集合
for(String s : array) {
System.out.println(s);
}
}
}

3.2文件到集合

  • 案例需求

把ArrayList集合中的字符串數(shù)據(jù)寫入到文本文件。要求:每一個字符串元素作為文件中的一行數(shù)據(jù)

  • 實現(xiàn)步驟
    • 創(chuàng)建ArrayList集合
    • 往集合中存儲字符串元素
    • 創(chuàng)建字符緩沖輸出流對象
    • 遍歷集合,得到每一個字符串數(shù)據(jù)
    • 調用字符緩沖輸出流對象的方法寫數(shù)據(jù)
    • 釋放資源
  • 代碼實現(xiàn)
public class ArrayListToTxtDemo {
public static void main(String[] args) throws IOException {
//創(chuàng)建ArrayList集合
ArrayList<String> array = new ArrayList<String>();

//往集合中存儲字符串元素
array.add("hello");
array.add("world");
array.add("java");

//創(chuàng)建字符緩沖輸出流對象
BufferedWriter bw = new BufferedWriter(new FileWriter("myCharStream\\array.txt"));

//遍歷集合,得到每一個字符串數(shù)據(jù)
for(String s : array) {
//調用字符緩沖輸出流對象的方法寫數(shù)據(jù)
bw.write(s);
bw.newLine();
bw.flush();
}

//釋放資源
bw.close();
}
}

3.3點名器

  • 案例需求

我有一個文件里面存儲了班級同學的姓名,每一個姓名占一行,要求通過程序實現(xiàn)隨點名器

  • 實現(xiàn)步驟
    • 創(chuàng)建字符緩沖輸入流對象
    • 創(chuàng)建ArrayList集合對象
    • 調用字符緩沖輸入流對象的方法讀數(shù)據(jù)
    • 把讀取到的字符串數(shù)據(jù)存儲到集合中
    • 釋放資源
    • 使用Random產生一個隨機數(shù),隨機數(shù)的范圍在:[0,集合的長度)
    • 把第6步產生的隨機數(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>();

//調用字符緩沖輸入流對象的方法讀數(shù)據(jù)
String line;
while ((line=br.readLine())!=null) {
//把讀取到的字符串數(shù)據(jù)存儲到集合中
array.add(line);
}

//釋放資源
br.close();

//使用Random產生一個隨機數(shù),隨機數(shù)的范圍在:[0,集合的長度)
Random r = new Random();
int index = r.nextInt(array.size());

//把第6步產生的隨機數(shù)作為索引到ArrayList集合中獲取值
String name = array.get(index);

//把第7步得到的數(shù)據(jù)輸出在控制臺
System.out.println("幸運者是:" + name);
}
}

3.4集合到文件改進版

  • 案例需求

把ArrayList集合中的學生數(shù)據(jù)寫入到文本文件。要求:每一個學生對象的數(shù)據(jù)作為文件中的一行數(shù)據(jù)?

格式:學號,姓名,年齡,居住地 舉例:yijizhichang001,林青霞,30,西安

  • 實現(xiàn)步驟
    • 定義學生類
    • 創(chuàng)建ArrayList集合
    • 創(chuàng)建學生對象
    • 把學生對象添加到集合中
    • 創(chuàng)建字符緩沖輸出流對象
    • 遍歷集合,得到每一個學生對象
    • 把學生對象的數(shù)據(jù)拼接成指定格式的字符串
    • 調用字符緩沖輸出流對象的方法寫數(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("yijizhichang001", "林青霞", 30, "西安");
Student s2 = new Student("yijizhichang002", "張曼玉", 35, "武漢");
Student s3 = new Student("yijizhichang003", "王祖賢", 33, "鄭州");

//把學生對象添加到集合中
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.getAge()).append(",").append(s.getAddress());

//調用字符緩沖輸出流對象的方法寫數(shù)據(jù)
bw.write(sb.toString());
bw.newLine();
bw.flush();
}

//釋放資源
bw.close();
}
}

3.5文件到集合改進版

  • 案例需求

把文本文件中的數(shù)據(jù)讀取到集合中,并遍歷集合。要求:文件中每一行數(shù)據(jù)是一個學生對象的成員變量值

舉例:yijizhichang001,林青霞,30,西安

  • 實現(xiàn)步驟
    • 定義學生類
    • 創(chuàng)建字符緩沖輸入流對象
    • 創(chuàng)建ArrayList集合對象
    • 調用字符緩沖輸入流對象的方法讀數(shù)據(jù)
    • 把讀取到的字符串數(shù)據(jù)用split()進行分割,得到一個字符串數(shù)組
    • 創(chuàng)建學生對象
    • 把字符串數(shù)組中的每一個元素取出來對應的賦值給學生對象的成員量值
    • 把學生對象添加到集合
    • 釋放資源
    • 遍歷集合
  • 代碼實現(xiàn)

由于Student類和上一題目是一致的,因此在這里不再贅述,直接給出測試類。

  • 測試類
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>();

//調用字符緩沖輸入流對象的方法讀數(shù)據(jù)
String line;
while ((line = br.readLine()) != null) {
//把讀取到的字符串數(shù)據(jù)用split()進行分割,得到一個字符串數(shù)組
String[] strArray = line.split(",");

//創(chuàng)建學生對象
Student s = new Student();
//把字符串數(shù)組中的每一個元素取出來對應的賦值給學生對象的成員變量值
//yijizhichang001,林青霞,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());
}
}
}

總結

本文主要給大家介紹了字節(jié)緩存流的構造方法,同時也介紹了字符流中的一些相關的內容,并且通過大量的案例供大家理解。最后通過一些經典的案例幫助大家對前面所學的知識做了一個綜合的應用。這篇文章也是沒有給出代碼的運行結果圖,一方面是由于相應的資料大家沒有,就是給出運行圖效果也不是很好。另外也是最關鍵的一點,沒有運行圖就是督促讀者自己去運行代碼,這樣間接地幫助大家理解一些代碼的實現(xiàn)過程。但是代碼沒有任何的問題。最多就是需要大家把該導的包導進去,還有就是把涉及到的到路徑換成自己電腦上有的路徑就可以了。在這里我們的所有File類以及相關文件讀入讀出的流就已經全部給大家介紹完畢了,希望大家認真學習,不斷提高自己的編程能力。我還是強烈建議大家去動手操作一下,這樣才能有一個很大的收獲

到此這篇關于Java字節(jié)緩存流的構造方法之文件IO流的文章就介紹到這了,更多相關Java文件IO流內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java設計模式之模板方法模式

    Java設計模式之模板方法模式

    這篇文章介紹了Java設計模式之模板方法模式,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-10-10
  • Java中try-catch-finally執(zhí)行順序你知道嗎

    Java中try-catch-finally執(zhí)行順序你知道嗎

    本文主要介紹了try-catch-finally執(zhí)行順序你知道嗎,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • 死磕 java同步系列之synchronized解析

    死磕 java同步系列之synchronized解析

    這篇文章主要介紹了Java中syncronized正確使用方法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2021-06-06
  • springmvc+shiro自定義過濾器的實現(xiàn)代碼

    springmvc+shiro自定義過濾器的實現(xiàn)代碼

    這篇文章主要介紹了springmvc+shiro自定義過濾器的實現(xiàn)方法,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-10-10
  • 使用springboot activiti關閉驗證自動部署方式

    使用springboot activiti關閉驗證自動部署方式

    這篇文章主要介紹了使用springboot activiti關閉驗證自動部署方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Mybatis 自定義類型處理器示例詳解

    Mybatis 自定義類型處理器示例詳解

    在某些情況下我們需要對類型做處理,例如數(shù)據(jù)存儲的是Long,程序里是BigDecimal,那么我們出庫入庫都需要做處理,此時就可以使用類型處理器,本文通過示例給大家介紹Mybatis 自定義類型處理器的相關知識,感興趣的朋友跟隨小編一起看看吧
    2023-10-10
  • 如何使用Spring RestTemplate訪問restful服務

    如何使用Spring RestTemplate訪問restful服務

    這篇文章主要介紹了如何使用Spring RestTemplate訪問restful服務,詳細的介紹了什么是RestTemplate以及簡單實現(xiàn),非常具有實用價值,需要的朋友可以參考下
    2018-10-10
  • 基于ElasticSearch Analyzer的使用規(guī)則詳解

    基于ElasticSearch Analyzer的使用規(guī)則詳解

    這篇文章主要介紹了基于ElasticSearch Analyzer的使用規(guī)則,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Mybatis?Plus?新版lambda?表達式查詢異常的處理

    Mybatis?Plus?新版lambda?表達式查詢異常的處理

    這篇文章主要介紹了Mybatis?Plus?新版lambda?表達式查詢異常的處理方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Springboot深入講解nocos的整合與使用

    Springboot深入講解nocos的整合與使用

    Nacos?是阿里巴巴推出來的一個新開源項目,這是一個更易于構建云原生應用的動態(tài)服務發(fā)現(xiàn)、配置管理和服務管理平臺,在項目開發(fā)過程中,我們經常使用nacos作為配置中心和注冊中心。本文章我們就從代碼層面研究下springboot是如何整合nacos使用的
    2022-07-07

最新評論