IO流筆記

字節輸入流:FileInputStream
  一般開發步驟:
一次讀取一個字節
    1:創建字節文件輸入流對象 FileInputStream fis=new FileInputStream(a.txt);
    2:讀數據:int by=0;
              while((by=fis.read())!=-1;){
System.out.println((char(by));
    
}
3:釋放資源  fis.close();
一次讀取一個字符數組 public static void main(String[] args) throws IOException {
FileInputStream fis=new FileInputStream("a.txt");
byte[] bys=new byte[1024];
int len=0;
while((len=fis.read(bys))!=-1){
System.out.println(new String(bys,0,len));
}
}


}
Copy 可以使用字節輸入流或者字符輸入流
   1:封裝數據源
2:封裝目的地
3讀取
4釋放資源
import java.io.FileInputStream;
import java.io.IOException;
import java.io.FileOutputStream;


public class test1 {
public static void main(String[] args) throws IOException {
FileInputStream fis=new FileInputStream("a.txt");
FileOutputStream fos=new FileOutputStream("b.txt");
byte[] bys =new byte[1024];
int len=0;
while((len=fis.read(bys))!=-1){
fos.write(bys,0,len);

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

}


}
字符緩衝輸入流:BufferedInputStream
1:一次讀取一個字節
2:一次讀取一個字符數組;


 import java.io.BufferedInputStream;
import java.io.FileInputStream;


import java.io.IOException;


public class test2 {
public static void main(String[] args) throws IOException {
BufferedInputStream bis =new BufferedInputStream(new FileInputStream("a.txt"));
byte[] bys=new byte[1024];
int len=0;
while((len=bis.read(bys))!=-1){
System.out.println(new String(bys,0,len));

}
bis.close();
}
}
爲什麼字節緩衝流不能夠直接針對文件進行操作?
因爲緩衝流只提供一個緩衝區,底層還是通過IO來實現數據的傳輸
flush()和close()的區別
flush()刷新緩衝區的流,強迫字節寫入,刷新之後可以繼續寫入數據;
close()關閉流對象所指向的文件,一旦關閉,不能寫入數據;
將字符串轉換爲字符數組;
package wbb1;


import java.util.Arrays;


public class test4 {
public static void main(String[] args) {


String s="細化";
byte[] bytes = s.getBytes();
System.out.println(Arrays.toString(bytes));
}


}
對於視頻,音頻,圖片等文件,優先選擇字符緩衝流傳輸(高效流)一次傳輸一個字符數組
用時:基本字節流>字節緩衝流>基本字符數組流>字符數組緩衝流
字符轉換輸入流 InputStreamReader->FileReader
字符轉換輸出流 OutputStreamWriter-> FileWriter
BufferRead br=new BufferedRead(new FileReader(“a.txt”))
使用遞歸的前提
1:定義一個方法
2:有規律
3:要有出口條件
package wbb1;


public class test6 {
public static void main(String[] args) {
int[] arr= new int[20];
arr[0]=1;
arr[1]=1;
for(int i=2;i<arr.length;i++){
arr[i]=arr[i-1]+arr[i-2];

}
System.out.println(arr[19]);

System.out.println(fib(20));
}


private static int fib(int n) {
if(n==1||n==2){
return 1;
}else{
return  fib(n-1)+fib(n-2);
}


}}








DateInputStream和DateOutputStream都屬於數據流,都可以對基本數據流進行操作
DateInputStream dis=new DateInputStream(new FileInputStream("a.txt"))
package wbb1;


import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;


內存操作流:ByteArrayOutputStream和ByteArrayInputStream
特點:針對內存操作小文件,程序一結束,這些內存中的數據就消失了。
public class test7 {
public static void main(String[] args) {
ByteArrayOutputStream bos=new ByteArrayOutputStream();
for(int i=1;i<5;i++){
System.out.println(("學習"+i).getBytes());
}
byte[] bys=bos.toByteArray();
ByteArrayInputStream bas = new ByteArrayInputStream(bys);
int by=0;
while((by=bas.read())!=-1){
System.out.println((char)by);

}



}}
打印流:字節打印流:PrintStream
        字符打印流:PrintWriter 有自動刷新功能
字節打印流只能操作目標數據,不能直接操作數據源
package wbb1;


import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;


public class test8 {
public static void main(String[] args) throws IOException {
PrintWriter pw=new PrintWriter(new FileWriter("c.txt",true));
pw.print("wo");

pw.print("ai");
pw.print("ni");
pw.close();

}


}


鍵盤錄入的兩種方式,
1:Scanner
Scanner sc=new Scanner(System.in);
2: IO流
BufferedReader br=new BufferedReader( new InputStreamReader(System.in))
SequenceInputStream 合併流
只能操作數據源不能操作目標數據
package wbb1;


import java.io.FileInputStream;


import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.SequenceInputStream;


public class test10 {
public static void main(String[] args) throws IOException {
InputStream i=new FileInputStream("a.txt");
InputStream j=new FileInputStream("aa.txt");
SequenceInputStream sis=new SequenceInputStream(i,j);
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("copy.txt"));
byte[] bys =new byte[1024];
int len=0;
while((len=sis.read(bys))!=-1){
bos.write(bys,0,len);
bos.flush();

}
sis.close();
bos.close();




}


}
序列化流:將對象像流的方式或者網絡傳輸中的數據寫數據.對象---->流數據:ObjectOutputStream
反序列化:將流數據或者網絡傳輸中的流數據讀取出來.流數據---->還原成對象:ObjectInputStream
Properties:屬性集合類,該類繼承自Hashtable<K,V>,該類屬於Map集合
有自己的添加元素和遍歷元素方法
添加元素 setProperty()
遍歷元素 StringPropertyNames();
package wbb1;




import java.util.Properties;
import java.util.Set;


public class test11 {
public static void main(String[] args) {
Properties pp=new Properties();
pp.setProperty("吳蹦蹦","23");
pp.setProperty("楊", "21");
 Set<String> set = pp.stringPropertyNames();
 for(String s :set){
String s1= pp.getProperty(s);
System.out.println(s+s1);
 
 }

}


}

































     
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章