1、IO流:File對象
在java裏\代表轉譯符,所以文件之間的分割符用\\代替
File file=new File("文件路徑") String類型
Long length=file.Length() 返回文件多少字節
File file1=new File("文件夾") 路徑
String[] fileNames=file1.list() 返回當前文件夾下文件名稱數組
file.exists() 判斷文件是否存在
file1.getAbsolutepath() 獲取文件絕對路徑
file.isFile() 判斷是否是單個文件true
file1.isFile() 判斷是否是單個文件false
file.isDirectory() 是否是文件夾false
file1.isDirectory() 是否是文件夾true
File[] files=file1.listFile() 獲取文件夾中的文件
Long xz=file.LastModified()獲取文件最後修改時間
File file2=new File("\\新創建的文件.txt")
boolean flag=file2.crerteNewFile() 創建一個文件
File file3=new File("\\新建文件夾")
boolean flag=file3.mkdir() 創建文件夾
boolean flag=file3.mkdirs() 創建一個文件夾下面還有一個文件夾,就是同時創建兩個文件夾
File file4=new File("url")
boolean flag=file4.delete() 刪除
file.renameTo("") 重命名
2、字節流:inputStream輸入流,outputStream輸出流
例:File file=new File("URL")
File file1=new File("URL")
InputStream is=new FileInputStream(file)
outputStream os=new FileOutputstream(file1)
if(is!=null&&os!=null){
int len=-1 定義一個數組,將內存中讀取字節存在數組中
byte[] myBytes=new byte[1024]
while(len=is.read(myBytes)!=-1){
os.write(myBytes,0,len) a從哪個數組中讀取,輸出流從哪寫出,b從第幾個元素開始讀取,c讀取多少個元素
}
is.close()
os.close()
}
3、BufferedInputStream建立在字節輸入流基礎上,不用一個字節一個字節處理,提高了性能
BufferedoutputStream建立在輸出流基礎上
4、字符流:不能對單字節構成的文件進行讀寫,不嫩處理視頻的圖片,以字節流爲基礎實現
InputStream in=new FileInputStream(file)
InputStreamreader read=new InputstreamReader(in)
OutputStream out=new FileOutputStream(file)
OutputStreamWriter wr=new OutputStreamWriter(out)
5、bufferedReader、BufferedWriter高級流
br.readline 讀取每一行的字符
br.colse()
bw.flush() 緩存中
bw.colse()
6、線程:
自定義一個類繼承自Thread類,重寫父類的run方法,創建自定義類的對象(實例),用該對象調用父類的start()方法啓動線程
實現Runnable接口,並實現run方法,穿件線程對象(兩種方式),用對象調用start()方法
線程同步:Sychronized(object){
}
修飾符 Sychronized 返回值 方法名/sale(){
}
在run()方法中調用sale()方法
線程:在一個程序中同時運行多個獨立流程
主線程:main
在java中創建線程的方法有兩種:繼承java.lang.Thread類,實現java.lang.Runnable接口
例如:public class Mythread extends Thread{
private Test test=new Test();
run(){重寫run方法
Syso.....(Thread.currentThread().getName());
test.dowork();
}
main()方法{
MyThread t1=new MyThread();同時啓動3次線程
MyThread t2=new MyThread();
MyThread t3=new MyThread();
t1.start();啓動線程
t2.start();
t3.start();
}
}
例如:public class Mythread implements Runnable{
run(){重寫run方法
Syso......(Thread.currentThread().getName());
for(int i=1;i<=5;i++){
Syso.....("===="+i);
Thread.sleep(10000);睡10秒
}
}
main(){
MyThread t1=new MyThread();第一種創建線程的方式
MyThread t2=new MyThread();第二種創建線程的方式
Thread tr=new Thread(tr2);
Thread trd=new Thread(new MyThread());
Thread trd1=new Thread(new MyThread());
Thread trd2=new Thread(new MyThread());
trd.start();
trd1.start();
trd2.start();
}
}
7、控制線程的主要方法:Thread
start() 啓動線程
suspend() 掛起線程
resame() 繼續掛起線程
join() 等待線程執行完畢,當前線程執行完畢之後再執行
yield() 暫緩線程
sleep() 線程等待
wait() 線程等待 屬於object類,必須在同步塊中調用
notify() 喚醒線程 屬於object類,必須在同步塊中調用
8、線程安全、線程不安全:
線程同步:就是當一個程序對一個線程安全的方法或者語句進行訪問的時候,其他的不能再對他進行操作了,必須等到這次訪問結束y以後才能對這個線程安全的方法進行訪問
線程安全:如果你的代碼所在進程中有多個線程在同時運行,而這些線程可能會同時運行這段代碼,如果每次運行和單線程運行結果一樣,而且其他的變量的值也和預期的是一樣的就是線程安全的,若每個線程中對全局變量靜態變量只有讀操作,而無寫操作,一般來說就是線程安全的,若有多個線程同時執行寫操作,一般都需要考慮線程同步,否則就可能影響線程安全
9、多線程:
多線程:新建、就緒、運行、阻塞、死亡狀態
資源利用率更高,程序設計更簡單,程序響應更快,提高CPU的利用率,用戶體驗好,使用線程可以把佔據時間長的程序中的人物放到後臺去處理用戶界面更吸引人,這樣比如用戶點擊了一個程序按鈕去觸發某個事件,可以彈出一個進度條來顯示處理的進度
大量的線程會影響性能,因爲操作系統需要在它們之間切換,更多的線程需要更多的內存空間,線程終止需要考慮對程序運行的影響
10、多線程有幾種實現方法,都是什麼?同步有幾種實現方法,都是什麼?
多線程有兩種實現方法:
方法一:繼承Thread類,重寫方法run();
方法二:實現Runnable接口,實現方法run();
共同點:
不論用哪種方法,都必須用Thread(如果是Thead子類就用它本身)產生線程,然後再調用start()方法。
區別:
繼承Thread類有一個缺點就是單繼承,而實現Runnable接口則彌補了它的缺點,可以實現多繼承
繼承Thread類必須如果產生Runnable實例對象,就必須產生多個Runnable實例對象,然後再用Thread產生多個線程;而實現Runnable接口,只需要建立一個實現這個類的實例,然後用這一個實例對象產生多個線程。即實現了資源的共享性
https://www.cnblogs.com/liujichang/p/3150387.html 介紹使用方法
實現同步有幾種方法:例如:synchronized,wait,notify都可以實現同步。
11、線程生命週期圖(新建、就緒、運行、阻塞、消亡)