回顧JAVA 6 IO基礎

2021-08-15 20:37:34 字數 4578 閱讀 9772

(1)io用於在裝置間進行資料傳輸的操作

(2)分類:

a:流向

輸入流讀取資料

輸出流寫出資料

b:資料型別

位元組流位元組輸入流 inputstream (fileinputstream  bufferedinputstream)

位元組輸出流 outputstream (fileoutputstream bufferedoutputstream)

字元流字元輸入流 reader (filereader bufferedreader)

字元輸出流 writer (filewriter bufferedwriter)

注意:a:如果我們沒有明確說明按照什麼分,預設按照資料型別分。

b:除非檔案用windows自帶的記事本開啟我們能夠讀懂,才採用字元流,否則建議使用位元組流。

(3)fileoutputstream寫出資料

a:操作步驟

a:建立位元組輸出流物件

b:呼叫write()方法

c:釋放資源

b:**體現:

fileoutputstream fos = new fileoutputstream("fos.txt");

fos.write("hello".getbytes());

fos.close();

c:要注意的問題?

a:建立位元組輸出流物件做了幾件事情?

b:為什麼要close()?

c:如何實現資料的換行?

d:如何實現資料的追加寫入?

(4)fileinputstream讀取資料

a:操作步驟

a:建立位元組輸入流物件

b:呼叫read()方法

c:釋放資源

b:**體現:

fileinputstream fis = new fileinputstream("fos.txt");

//方式1

int by = 0;

while((by=fis.read())!=-1)

//方式2

byte bys = new byte[1024];

int len = 0;

while((len=fis.read(bys))!=-1)

fis.close();

(1)位元組流操作中文資料不是特別的方便,所以就出現了轉換流。

轉換流的作用就是把位元組流轉換字元流來使用。

(2)轉換流其實是乙個字元流

字元流 = 位元組流 + 編碼表

(3)編碼表

a:就是由字元和對應的數值組成的一張表

b:常見的編碼表

ascii

iso-8859-1

gb2312

gbkgb18030

utf-8

c:字串中的編碼問題

編碼string -- byte

解碼byte -- string

(4)io流中的編碼問題

a:outputstreamwriter

outputstreamwriter(outputstream os):預設編碼,gbk

outputstreamwriter(outputstream os,string charsetname):指定編碼。

b:inputstreamreader

inputstreamreader(inputstream is):預設編碼,gbk

inputstreamreader(inputstream is,string charsetname):指定編碼

c:編碼問題其實很簡單

編碼只要一致即可

(5)字元流

reader

|--inputstreamreader

|--filereader

|--bufferedreader

writer

|--outputstreamwriter

|--filewriter

|--bufferedwriter

(1)可以操作基本型別的資料

(2)流物件名稱

datainputstream

dataoutputstream

(1)有些時候我們操作完畢後,未必需要產生乙個檔案,就可以使用記憶體操作流。

(2)三種

a:bytearrayinputstream,bytearrayoutputstream

b:chararrayreader,chararraywriter

c:stringreader,stringwriter

(1)位元組列印流,字元列印流

(2)特點:

a:只操作目的地,不算子據源

b:可以操作任意型別的資料

c:如果啟用了自動重新整理,在呼叫println()方法的時候,能夠換行並重新整理

d:可以直接操作檔案

問題:哪些流可以直接操作檔案呢?

看api,如果其構造方法能夠同時接收file和string型別的引數,一般都是可以直接操作檔案的

(3)複製文字檔案

bufferedreader br = new bufferedreader(new filereader("a.txt"));

printwriter pw = new printwriter(new filewriter("b.txt"),true);

string line = null;

while((line=br.readline())!=null)

pw.close();

br.close();

(1)system類下面有這樣的兩個字段

in 標準輸入流

out 標準輸出流

(2)三種鍵盤錄入方式

a:main方法的args接收引數

b:system.in通過bufferedreader進行包裝

bufferedreader br = new bufferedreader(new inputstreamreader(system.in));

c:scanner

scanner sc = new scanner(system.in);

(3)輸出語句的原理和如何使用字元流輸出資料

a:原理

system.out.println("helloworld");

printstream ps = system.out;

ps.println("helloworld");

b:把system.out用字元緩衝流包裝一下使用

bufferedwriter bw = new bufferedwriter(new outputstreamwriter(system.out));

(1)可以按照檔案指標的位置寫資料和讀資料。

(2)案例:

a:寫資料

b:讀資料

c:獲取和改變檔案指標的位置

(1)把多個輸入流的資料寫到乙個輸出流中。

(2)構造方法:

a:sequenceinputstream(inputstream s1, inputstream s2) 

b:sequenceinputstream(enumeration<? extends inputstream> e) 

(1)可以把物件寫入文字檔案或者在網路中傳輸

(2)如何實現序列化呢?

讓被序列化的物件所屬類實現序列化介面。

該介面是乙個標記介面。沒有功能需要實現。

(3)注意問題:

把資料寫到檔案後,在去修改類會產生乙個問題。

如何解決該問題呢?

在類檔案中,給出乙個固定的序列化id值。

而且,這樣也可以解決黃色警告線問題

(4)面試題:

什麼時候序列化?

如何實現序列化?

什麼是反序列化?

(1)是乙個集合類,hashtable的子類

(2)特有功能

a:public object setproperty(string key,string value)

b:public string getproperty(string key)

c:public setstringpropertynames()

(3)和io流結合的方法

把鍵值對形式的文字檔案內容載入到集合中

public void load(reader reader)

public void load(inputstream instream)

把集合中的資料儲存到文字檔案中

public void store(writer writer,string comments)

public void store(outputstream out,string comments)

(4)案例:

a:根據給定的檔案判斷是否有鍵為"lisi"的,如果有就修改其值為100

b:寫乙個程式實現控制猜數字小遊戲程式不能玩超過5次

(1)jdk4出現的nio,對以前的io操作進行了優化,提供了效率。但是大部分我們看到的還是以前的io

(2)jdk7的nio的使用

path:路徑

paths:通過靜態方法返回乙個路徑

files:提供了常見的功能

複製文字檔案

把集合中的資料寫到文字檔案

Java基礎知識回顧 6

1 遍歷 jar zip 檔案中的資源 file jar newfile myfile.jar zipinputstream zis new zipinputstream newfileinputstream jar try finally 2 遍歷web應用中的資源。setsubresources...

基礎回顧 關於IO流

一.認識file類 關於file類的方法如下 1 檔名 getname 檔名 路徑名 getpath 路徑名 getabsolutefile 絕對路徑所對應的file物件 getabsolutepath 絕對路徑名 getparent 父目錄 相對路徑的父目錄,可能為null 如.刪除本身後的結果 ...

Java檔案Io基礎

file file2 new file d test.txt 建立檔案物件,file類中的構造方法中的引數為字串,表示的是檔案的位址,其中,在絕對路徑中,磁碟的編號後的斜桿可以為 windows系統中路徑標識 也可以為 跨平台 制定路徑之下建立的檔案物件,不代表著該路徑之下有這個檔案,也就是說fil...