java io流简单笔记
IO流
網(wǎng)圖
看JDK文檔更清晰
看JDK文檔更清晰
看JDK文檔更清晰
看JDK文檔更清晰
原理
參考博文(https://blog.csdn.net/sinat_37064286/article/details/86537354)詳細(xì)
所謂的輸出流和輸入流是相對于代碼程序而言的
- 輸入流:從別的地方(本地文件,網(wǎng)絡(luò)上的資源等)獲取資源 輸入到 我們的程序中
- 輸出流:從我們的程序中 輸出到 別的地方(本地文件), 將一個字符串保存到本地文件中,就需要使用輸出流。
根據(jù)處理單位又分為字符流和字節(jié)流
- 1字符 = 2字節(jié) 、 1字節(jié)(byte) = 8位(bit) 、 一個漢字占兩個字節(jié)長度 。
按功能不同分為 節(jié)點流、處理流
4個基本的抽象流類型,所有的流都繼承這四個
-
? 輸入流 輸出流
字節(jié)流 InputStream outputStream
字符流 Reader Writer
字符流的由來: Java中字符是采用Unicode標(biāo)準(zhǔn),一個字符是16位,即一個字符使用兩個字節(jié)來表示。為此,JAVA中引入了處理字符的流。因為數(shù)據(jù)編碼的不同,而有了對字符進(jìn)行高效操作的流對象。本質(zhì)其實就是基于字節(jié)流讀取時,去查了指定的碼表。
字符輸出流
部分類:
FileWriter
-
用來寫入字符文件的便捷類
- public class Test1 {public static void main(String[] args) throws Exception {FileWriter fileWriter=new FileWriter("A/testA11",true); //如果沒有這個文件的話就自動新建,true表示追加,而不是覆蓋原有數(shù)據(jù)String str1="asdfghjkl/";fileWriter.append(str1);fileWriter.flush(); // 刷新該流的緩沖//fileWriter.close(); //先強(qiáng)制刷新緩存,在關(guān)閉 使用流必須要關(guān)閉buffW();}
BufferedWriter
-
將文本寫入字符輸出流,緩沖各個字符,從而提供單個字符、數(shù)組和字符串的高效寫入。
- //BufferedWriter(Writer out)//創(chuàng)建一個使用默認(rèn)大小輸出緩沖區(qū)的緩沖字符輸出流。//BufferedWriter(Writer out, int sz)//創(chuàng)建一個使用給定大小輸出緩沖區(qū)的新緩沖字符輸出流。/*** BufferedWriter 簡單使用,建議看文檔* @throws Exception*/static void buffW() throws Exception {FileWriter fileWriter=new FileWriter("A/testA11");BufferedWriter bufferedWriter=new BufferedWriter(fileWriter);char[] chars={'1','2','3','4','5','6','7'};for (int i=0;i<3;i++){bufferedWriter.write(chars,0,chars.length); //寫入緩存,bufferedWriter.newLine(); //寫入一個行終止,也就是換行bufferedWriter.write('i'); //再寫入bufferedWriter.newLine();bufferedWriter.flush();}bufferedWriter.close();// 1234567// i// 1234567// i// 1234567// i}
CharArrayReader
-
此類實現(xiàn)一個可用作 Writer 的字符緩沖區(qū)。緩沖區(qū)會隨向流中寫入數(shù)據(jù)而自動增長。
-
在此類上調(diào)用 close() 無效,并且在關(guān)閉該流后可以調(diào)用此類中的各個方法,而不會產(chǎn)生任何 IOException。
-
例子
static void charAW() throws Exception {///FileWriter fileWriter=new FileWriter("A/testA11");CharArrayWriter charArrayWriter=new CharArrayWriter();for (int i=0;i<3;i++){// System.out.println(charArrayWriter.append(String.valueOf(i))); 0 01 012charArrayWriter.append(String.valueOf(i));}charArrayWriter.close(); //沒有用,charArrayWriter還是可以正常使用charArrayWriter.write('a');System.out.println(charArrayWriter.toString()); //012a String類型System.out.println(charArrayWriter.toCharArray()); // 012a char[]類型System.out.println("重置前"+charArrayWriter.size()); //重置前4//那close()沒用,緩存滿了怎么辦呢charArrayWriter.reset(); //緩存重置System.out.println("重置后"+charArrayWriter.size()); // 重置后0}
FilterWriter
PrintWriter
-
向文本輸出流打印對象的格式化表示形式。此類實現(xiàn)在 PrintStream 中的所有 print方法。它不包含用于寫入原始字節(jié)的方法,對于這些字節(jié),程序應(yīng)該使用未編碼的字節(jié)流進(jìn)行寫入。
-
與 PrintStream 類不同,如果啟用了自動刷新(換行),則只有在調(diào)用 println、printf 或 format 的其中一個方法時才可能完成此操作,而不是每當(dāng)正好輸出換行符時才完成。
-
例子
static void priW() throws Exception {//FileWriter fileWriter = new FileWriter("A/testA11");//PrintWriter printWriter = new PrintWriter(fileWriter);PrintWriter printWriter = new PrintWriter("A/testA11");for (int i = 0; i < 3; i++) {printWriter.println("數(shù)據(jù)" + i);//數(shù)據(jù)0//數(shù)據(jù)1//數(shù)據(jù)2}printWriter.close();}
字符輸入流
部分類:
FileReader
-
用來讀取字符文件的便捷類。此類的構(gòu)造方法假定默認(rèn)字符編碼和默認(rèn)字節(jié)緩沖區(qū)大小都是適當(dāng)?shù)摹?/p>
-
例子
static void filS() throws Exception {FileReader fileReaderA = new FileReader("A/testA11");char[] ch = new char[1024];while ((fileReaderA.read(ch)) != -1) {}System.out.println(ch);fileReaderA.close(); }
BufferedReade
-
從字符輸入流中讀取文本,緩沖各個字符,從而實現(xiàn)字符、數(shù)組和行的高效讀取。
-
建議用 BufferedReader 包裝所有其 read() 操作可能開銷很高的 Reader(如 FileReader 和 InputStreamReader)
-
例子
static void buffS() throws Exception {FileReader fileReader = new FileReader("A/testA11");FileWriter fileWriter = new FileWriter("B/testB1");BufferedReader bufferedReader = new BufferedReader(fileReader);BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);char[] ch = new char[1024];String ch1;//bufferedReader.skip(2); //要跳過幾個字符//while ((bufferedReader.read(ch))!=-1){//復(fù)制文件內(nèi)容 A/testA11》》B/testB1while ((ch1 = bufferedReader.readLine()) != null) {fileWriter.append( ch1);fileWriter.flush();}//System.out.println(ch);//數(shù)據(jù)0//數(shù)據(jù)1//數(shù)據(jù)2fileReader.close();fileWriter.close(); }
字節(jié)輸入流
部分類:
- FileInputStream從文件系統(tǒng)中的某個文件中獲得輸入字節(jié)。
字節(jié)輸出流
部分類:
FileOutputStream
-
文件輸出流是用于將數(shù)據(jù)寫入 File或 FileDescriptor 的輸出流。
-
例子
static void onpS() throws Exception {FileOutputStream fileOutputStream=new FileOutputStream("A/testA11");byte[] ch={'a','b','c','d','e','f','g'};fileOutputStream.write(ch);fileOutputStream.close();}
h
File
文件和目錄路徑名的抽象表示形式。
例子
- static void file() throws Exception {File file1=new File("B/C/c/v");File file2=new File("B/s");File file=new File("C/v/testA12.txt");File file3=new File("A/testA12.txt");//file2.mkdir(); //單級(一個目錄)//file1.mkdirs(); //在B目錄下創(chuàng)建新目錄C 多級//如果指定的文件不存在并成功地創(chuàng)建,則返回 true;如果指定的文件已經(jīng)存在,則返回 false//目錄是已存在的,如果路徑是不存在的會報異常(系統(tǒng)找不到指定的路徑。)// file.createNewFile();// System.out.println(File.separatorChar); // separator 同功能,返回類型不同;與系統(tǒng)有關(guān)的默認(rèn)名稱分隔符。// System.out.println(File.pathSeparatorChar); // pathSeparator ; 與系統(tǒng)有關(guān)的路徑分隔符。// System.out.println(file.getName()); //獲取文件名(包括后綴)// System.out.println(file.getParent()); // C\v 返回此抽象路徑名父目錄的路徑名字符串;如果此路徑名沒有指定父目錄,則返回 null。// System.out.println(file.getAbsoluteFile()); //獲取文件絕對路徑// System.out.println(file.getPath()); //C\v\testA12.txt 將此抽象路徑名轉(zhuǎn)換為一個路徑名字符串。所得字符串使用 默認(rèn)名稱分隔符分隔名稱序列中的名稱// System.out.println(file.isAbsolute()); //測試此抽象路徑名是否為絕對路徑名// System.out.println(file.isDirectory()); //測試此抽象路徑名表示的文件是否是一個目錄// System.out.println(file.isFile()); //測試此抽象路徑名表示的文件是否是一個標(biāo)準(zhǔn)文件// System.out.println(file.isHidden()); // 測試此抽象路徑名指定的文件是否是一個隱藏文件// File file41=new File("A/testA1");// File file42=new File("A/testA122");//相差2位//// //按字母順序比較兩個抽象路徑名// //如果該參數(shù)等于此抽象路徑名,則返回零;// // 如果此抽象路徑名在字母順序上小于該參數(shù),則返回小于零的值;// //如果此抽象路徑名在字母順序上大于該參數(shù),則返回大于零的值// System.out.println(file41.compareTo(file42)); //-2// String pattern = "yyyy-MM-dd HH:mm:ss";// //文件最后一次被修改的時間// //2021-05-04 14:14:12// System.out.println(new SimpleDateFormat(pattern).format(new Date(file3.lastModified())));//返回由此抽象路徑名表示的文件的長度 ,以字節(jié)為單位System.out.println(file3.length()); //123456我 返回9 包括結(jié)束符}
序列化與反序列化
static void obj() throws Exception {A a = new A();a.setId(1);a.setName("張三");a.setAge(23);A a2 = new A(2, "李四", 22);A a21 = new A(3, "李五", 23);A a22 = new A(4, "李六", 24);//序列化// ObjectOutputStream objectOutputStream=new ObjectOutputStream(new FileOutputStream("A/testA12.txt"));// objectOutputStream.writeObject(a);// objectOutputStream.writeObject(a2);// objectOutputStream.writeObject(a21);// objectOutputStream.writeObject(a22);// objectOutputStream.close();//反序列化FileInputStream fileInputStream=new FileInputStream("A/testA12.txt");ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);// A aa = (A) objectInputStream.readObject();//// A aa1 = (A) objectInputStream.readObject();A aa =null;for (int i=0;i<fileInputStream.available();i++){aa = (A) objectInputStream.readObject();System.out.println(aa.toString());aa=null;}objectInputStream.close();}///要序列化的類 //實現(xiàn)Serializable接口 class A implements Serializable {private Integer id;private String name;private Integer age;public A() {}public A(Integer id, String name, Integer age) {this.id = id;this.name = name;this.age = age;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}@Overridepublic String toString() {return "A{" +"id=" + id +", name='" + name + '\'' +", age=" + age +'}';} }transient 不需要序列化的屬性使用關(guān)鍵字
好像忘了寫什么?想不起來了
總結(jié)
以上是生活随笔為你收集整理的java io流简单笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html+css:display:fle
- 下一篇: 智能好用还免费的修图工具,赶紧收藏起来吧