字節輸入流: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);
}
}
}
IO流筆記
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
Java第三週作業(2)
課堂練習4: 編寫代碼模擬手機與SIM卡的組合關係。 要求: SIM卡類負責創建SIM卡; Phone類負責創建手機; 手機可以組合一個SIM卡;
Miss_You123123
2020-06-25 09:43:01
lesson8:集合框架作業2
搬运工、
2020-06-17 09:19:15
lesson7:gui: 編寫一個JFrame窗口
代碼:import java.awt.BorderLayout; import java.awt.FlowLayout; import ja
搬运工、
2020-06-17 09:19:15
lesson 11:使用TCP協議編寫一個網絡程序,設置服務器端的監聽端口是8002,當與客戶端建立連接後,服務器端向客戶端發送數據“Hello, world”,客戶端收到數據後打印輸出。
搬运工、
2020-06-17 09:19:15
作業3:求1+2!+3!+...+20!的和
搬运工、
2020-06-17 09:19:15
作業4: 求一個n階方陣對角線元素之和。
搬运工、
2020-06-17 09:19:15
lesson 6:寫一個方法void triangle(int a,int b,int c),判斷三個參數是否能構成一個三角形。
題目: 寫一個方法void triangle(int a,int b,int c),判斷三個參數是否能構成一個三角形。如果不能則拋出異常Illega
搬运工、
2020-06-17 09:19:15
上課內容及作業。File類的常用方法的使用、遞歸遍歷目錄及其子目錄下的文件、使用delete()方法刪除目錄
qq_45766098
2020-05-21 20:51:56
Java初學者作業——編寫JAVA程序,要求輸入技術部門5位員工的理論成績和實操成績,計算並輸出各位員工的最終評測成績。
明金同学
2020-03-12 10:08:53
Java初學者作業——編寫JAVA程序,在控制檯中輸入六位員工的姓名,通過隨機點名方式,輸出當選組長的員工姓名。
明金同学
2020-03-12 10:08:53
Java初學者作業——爲某超市設計管理系統,需要在控制檯展示系統菜單,菜單之間可以完成跳轉。
明金同学
2020-03-12 10:08:53
Java初學者作業——編寫JAVA程序,在控制檯輸入一位學生的英語考試成績,根據評測規則,輸出對應的成績等級。定義方法實現學生成績的評測功能。
明金同学
2020-03-12 10:08:53
Java初學者作業——定義英雄類(Hero),英雄類中的屬性包括:姓名、攻擊力、防禦力、生命值和魔法值;方法包括:攻擊、介紹。
明金同学
2020-03-06 12:59:12
Java初學者作業——完成對已定義類(Admin)的對象的創建。並完成屬性的賦值和方法的調用。
明金同学
2020-03-06 12:59:12
Java初學者作業——定義管理員類(Admin),管理員類中的屬性包括:姓名、賬號、密碼、電話;方法包括:登錄、顯示自己的信息。
明金同学
2020-03-06 12:59:12