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

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

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

前言:

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

1.字節(jié)緩沖流

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

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

Java之文件IO流詳解完結(jié)_釋放資源

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

BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("myByteStream\\bos.txt"));
//寫(xiě)數(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"));

//一次讀取一個(gè)字節(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();
}
}

大家在運(yùn)行該代碼的時(shí)候,將相應(yīng)的各種包導(dǎo)進(jìn)去,另外將代碼里面相應(yīng)的路徑換成讀者自己的,代碼就可以完美運(yùn)行了,可以看看其效果。

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

  • 案例需求

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

2.字符流

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

  • 字符流的介紹

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

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

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

用字節(jié)流復(fù)制文本文件時(shí),文本文件也會(huì)有中文,但是沒(méi)有問(wèn)題,原因是最終底層操作會(huì)自動(dòng)進(jìn)行字節(jié)拼接成中文,如何識(shí)別是中文的呢?

漢字在存儲(chǔ)的時(shí)候,無(wú)論選擇哪種編碼存儲(chǔ),第一個(gè)字節(jié)都是負(fù)數(shù)

2.2編碼表

  • 什么是字符集

是一個(gè)系統(tǒng)支持的所有字符的集合,包括各國(guó)家文字、標(biāo)點(diǎn)符號(hào)、圖形符號(hào)、數(shù)字等

l計(jì)算機(jī)要準(zhǔn)確的存儲(chǔ)和識(shí)別各種字符集符號(hào),就需要進(jìn)行字符編碼,一套字符集必然至少有一套字符編碼。常見(jiàn)字符集有ASCII字符集、GBXXX字符集、Unicode字符集等

  • 常見(jiàn)的字符集
  • ASCII字符集:

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

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

  • GBXXX字符集:

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

  • Unicode字符集

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

編碼規(guī)則:

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

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

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

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

2.3字符串中的編碼解碼問(wèn)題

  • 相關(guān)方法

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

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

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字符流中的編碼解碼問(wèn)題

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

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

它使用的字符集可以由名稱指定,也可以被明確指定,或者可以接受平臺(tái)的默認(rèn)字符集

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

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

它使用的字符集可以由名稱指定,也可以被明確指定,或者可以接受平臺(tái)的默認(rèn)字符集

  • 構(gòu)造方法

Java之文件IO流詳解完結(jié)_輸出流_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("中國(guó)");
osw.close();

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

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

  • 方法介紹

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

  • 刷新和關(guān)閉的方法

Java之文件IO流詳解完結(jié)_釋放資源_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é)_字節(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字符流復(fù)制Java文件

  • 案例需求

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

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

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

//一次讀寫(xiě)一個(gè)字符數(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字符流復(fù)制Java文件改進(jìn)版

  • 案例需求

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

  • 實(shí)現(xiàn)步驟
    • 根據(jù)數(shù)據(jù)源創(chuàng)建字符輸入流對(duì)象
    • 根據(jù)目的地創(chuàng)建字符輸出流對(duì)象
    • 讀寫(xiě)數(shù)據(jù),復(fù)制文件
    • 釋放資源
  • 代碼實(shí)現(xiàn)
public class CopyJavaDemo02 {
public static void main(String[] args) throws IOException {
//根據(jù)數(shù)據(jù)源創(chuàng)建字符輸入流對(duì)象
FileReader fr = new FileReader("myCharStream\\ConversionStreamDemo.java");
//根據(jù)目的地創(chuàng)建字符輸出流對(duì)象
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??:將文本寫(xiě)入字符輸出流,緩沖字符,以提供單個(gè)字符,數(shù)組和字符串的高效寫(xiě)入,可以指定緩沖區(qū)大小,或者可以接受默認(rèn)大小。默認(rèn)值足夠大,可用于大多數(shù)用途
    • ??BufferedReader??:從字符輸入流讀取文本,緩沖字符,以提供字符,數(shù)組和行的高效讀取,可以指定緩沖區(qū)大小,或者可以使用默認(rèn)大小。 默認(rèn)值足夠大,可用于大多數(shù)用途
  • 構(gòu)造方法

Java之文件IO流詳解完結(jié)_輸出流_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"));

//一次讀取一個(gè)字符數(shù)據(jù)
//一次讀取一個(gè)字符數(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字符緩沖流復(fù)制Java文件

  • 案例需求

把模塊目錄下的??ConversionStreamDemo.java??? 復(fù)制到模塊目錄下的?? Copy.java??

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

//一次讀寫(xiě)一個(gè)字符數(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流詳解完結(jié)_釋放資源_08

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

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

//寫(xiě)數(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字符緩沖流特有功能復(fù)制Java文件

  • 案例需求

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

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

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

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

2.13IO流小結(jié)

  • 字節(jié)流

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

  • 字符流

Java之文件IO流詳解完結(jié)_Java SE_10

3練習(xí)案例

3.1集合到文件

  • 案例需求

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

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

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

3.2文件到集合

  • 案例需求

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

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

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

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

//遍歷集合,得到每一個(gè)字符串?dāng)?shù)據(jù)
for(String s : array) {
//調(diào)用字符緩沖輸出流對(duì)象的方法寫(xiě)數(shù)據(jù)
bw.write(s);
bw.newLine();
bw.flush();
}

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

3.3點(diǎn)名器

  • 案例需求

我有一個(gè)文件里面存儲(chǔ)了班級(jí)同學(xué)的姓名,每一個(gè)姓名占一行,要求通過(guò)程序?qū)崿F(xiàn)隨點(diǎn)名器

  • 實(shí)現(xiàn)步驟
    • 創(chuàng)建字符緩沖輸入流對(duì)象
    • 創(chuàng)建ArrayList集合對(duì)象
    • 調(diào)用字符緩沖輸入流對(duì)象的方法讀數(shù)據(jù)
    • 把讀取到的字符串?dāng)?shù)據(jù)存儲(chǔ)到集合中
    • 釋放資源
    • 使用Random產(chǎn)生一個(gè)隨機(jī)數(shù),隨機(jī)數(shù)的范圍在:[0,集合的長(zhǎng)度)
    • 把第6步產(chǎn)生的隨機(jī)數(shù)作為索引到ArrayList集合中獲取值
    • 把第7步得到的數(shù)據(jù)輸出在控制臺(tái)
  • 代碼實(shí)現(xiàn)
public class CallNameDemo {
public static void main(String[] args) throws IOException {
//創(chuàng)建字符緩沖輸入流對(duì)象
BufferedReader br = new BufferedReader(new FileReader("myCharStream\\names.txt"));

//創(chuàng)建ArrayList集合對(duì)象
ArrayList<String> array = new ArrayList<String>();

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

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

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

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

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

3.4集合到文件改進(jìn)版

  • 案例需求

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

格式:學(xué)號(hào),姓名,年齡,居住地 舉例:yijizhichang001,林青霞,30,西安

  • 實(shí)現(xiàn)步驟
    • 定義學(xué)生類
    • 創(chuàng)建ArrayList集合
    • 創(chuàng)建學(xué)生對(duì)象
    • 把學(xué)生對(duì)象添加到集合中
    • 創(chuàng)建字符緩沖輸出流對(duì)象
    • 遍歷集合,得到每一個(gè)學(xué)生對(duì)象
    • 把學(xué)生對(duì)象的數(shù)據(jù)拼接成指定格式的字符串
    • 調(diào)用字符緩沖輸出流對(duì)象的方法寫(xiě)數(shù)據(jù)
    • 釋放資源
  • 代碼實(shí)現(xiàn)
  • 學(xué)生類
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;
}
}
  • 測(cè)試類
public class ArrayListToFileDemo {
public static void main(String[] args) throws IOException {
//創(chuàng)建ArrayList集合
ArrayList<Student> array = new ArrayList<Student>();

//創(chuàng)建學(xué)生對(duì)象
Student s1 = new Student("yijizhichang001", "林青霞", 30, "西安");
Student s2 = new Student("yijizhichang002", "張曼玉", 35, "武漢");
Student s3 = new Student("yijizhichang003", "王祖賢", 33, "鄭州");

//把學(xué)生對(duì)象添加到集合中
array.add(s1);
array.add(s2);
array.add(s3);

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

//遍歷集合,得到每一個(gè)學(xué)生對(duì)象
for (Student s : array) {
//把學(xué)生對(duì)象的數(shù)據(jù)拼接成指定格式的字符串
StringBuilder sb = new StringBuilder();
sb.append(s.getSid()).append(",").append(s.getName()).append(",").append(s.getAge()).append(",").append(s.getAddress());

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

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

3.5文件到集合改進(jìn)版

  • 案例需求

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

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

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

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

  • 測(cè)試類
public class FileToArrayListDemo {
public static void main(String[] args) throws IOException {
//創(chuàng)建字符緩沖輸入流對(duì)象
BufferedReader br = new BufferedReader(new FileReader("myCharStream\\students.txt"));

//創(chuàng)建ArrayList集合對(duì)象
ArrayList<Student> array = new ArrayList<Student>();

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

//創(chuàng)建學(xué)生對(duì)象
Student s = new Student();
//把字符串?dāng)?shù)組中的每一個(gè)元素取出來(lái)對(duì)應(yīng)的賦值給學(xué)生對(duì)象的成員變量值
//yijizhichang001,林青霞,30,西安
s.setSid(strArray[0]);
s.setName(strArray[1]);
s.setAge(Integer.parseInt(strArray[2]));
s.setAddress(strArray[3]);

//把學(xué)生對(duì)象添加到集合
array.add(s);
}

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

//遍歷集合
for (Student s : array) {
System.out.println(s.getSid() + "," + s.getName() + "," + s.getAge() + "," + s.getAddress());
}
}
}

總結(jié)

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

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

相關(guān)文章

  • Java設(shè)計(jì)模式之模板方法模式

    Java設(shè)計(jì)模式之模板方法模式

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

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

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

    死磕 java同步系列之synchronized解析

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

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

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

    使用springboot activiti關(guān)閉驗(yàn)證自動(dòng)部署方式

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

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

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

    如何使用Spring RestTemplate訪問(wèn)restful服務(wù)

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

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

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

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

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

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

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

最新評(píng)論