-
File.list()方法用于列出當(dāng)前目錄下的子目錄和文件,獲取該目錄下的所有文件?
File.listFiles()返回的是直接子目錄(文件)的抽象,獲取該目錄下所有文件和目錄的絕對(duì)路徑
通過list()方法獲取的結(jié)果:
通過listFiles()方法獲取的結(jié)果:
圖轉(zhuǎn)自博客:bingguang1993
查看全部 -
File file=new File("E:\\javaio\\imooc"),“\\”或“//”是中間的分隔符,也可以用File.separator。
file.exists()跟其字面意思一樣,用于判斷文件知否存在
file.mkdir()可以直接創(chuàng)建文件夾(E:\\javaio\\imooc),file.mkdirs()可以創(chuàng)建多級(jí)目錄,file.createNewFile()可以直接創(chuàng)建文件("E:\\javaio\\日記1.txt"),配合exists做個(gè)if else判斷比較好
file.delete()刪除
file.isDirectory()判斷是否是一個(gè)目錄,是返回true,不是目錄或者目錄不存在返回false,file.isFile()判讀是否是一個(gè)文件
File file2=new File("E:\\javaio","日記1.txt")是另一個(gè)構(gòu)造函數(shù),第一個(gè)參數(shù)代表目錄,第二個(gè)代表文件
以下為幾種File類中簡單的方法
查看全部 -
1.Integer.toHexString(byte)把字節(jié)(轉(zhuǎn)換成了int)以16進(jìn)制的方式顯示 ,byte轉(zhuǎn)換成int相當(dāng)于int后八位為byte原來的,后八位前24位加上24個(gè)0,
2.Integer.toHexString(byte%0xff)?把前頭的0取掉,只留下后八位
3.轉(zhuǎn)換成字節(jié)序列用的是項(xiàng)目默認(rèn)的編碼gbk,中文占用2個(gè)字節(jié),英文占用1個(gè)字節(jié)
4.byte[] byte=s.getBytes()是用默認(rèn)編碼,byte[] byte=s.getBytes(參數(shù))是用參數(shù)指定的編碼(參數(shù)為:“某種編碼”)
5.utf-8編碼中文占用3個(gè)字節(jié),英文占用1個(gè)字節(jié)
6.java是雙字節(jié)編碼,utf-16be編碼,字符串一個(gè)字符占兩個(gè)字節(jié), 中文占用2個(gè)字節(jié),英文占用2個(gè)字節(jié)。
7.當(dāng)你的字節(jié)序列式某種編碼時(shí),這個(gè)時(shí)候想把字節(jié)序列變成字符串,也需要用這種編碼方式,否則會(huì)出現(xiàn)亂碼。String str1=new String(byte):用項(xiàng)目默認(rèn)的編碼,String str2=new String(byte,參數(shù)):用參數(shù)指定的編碼。比如byte[] byte=String.getBytes("utf-8"),那么將此字節(jié)序列變成字符串就要用String str=new Stirng(byte,"utf-8")。用gbk編碼的字節(jié)序列直接用第一種不指定編碼參數(shù)的方法即可,因?yàn)槟J(rèn)的就是用gbk編碼所以不用gbk編碼
8.文本文件就是字節(jié)序列,可以是任意編碼的字節(jié)序列。如果我們?cè)谥形臋C(jī)器上直接創(chuàng)建文本文件,那么該文本文件只認(rèn)識(shí)ansi編碼,中文系統(tǒng)下,ansi編碼代表gbk編碼
9.中文機(jī)器上你直接創(chuàng)建一個(gè)文本文件,那么它只能認(rèn)識(shí)ansi編碼(gbk),但是文本文件本身可以放各種編碼,直接粘貼到中文機(jī)器上的無論編碼是哪種它都認(rèn)識(shí),只不過在中文機(jī)器上直接創(chuàng)建時(shí)會(huì)有這個(gè)特殊性。
10.某個(gè)項(xiàng)目的文本文件只認(rèn)識(shí)項(xiàng)目指定的編碼,換一種別的編碼他就不認(rèn)識(shí)了。比如你把用utf-8編碼的A項(xiàng)目下的文本文件直接拷貝到使用默認(rèn)編碼gbk的B項(xiàng)目下,拷貝的文件里就會(huì)出現(xiàn)亂碼,但如果只是把A項(xiàng)目文本文件中的內(nèi)容拷貝到B項(xiàng)目下的文本文件中,他會(huì)自動(dòng)進(jìn)行轉(zhuǎn)換
查看全部 -
一個(gè)類實(shí)現(xiàn)了序列化接口,那么其子類都可以進(jìn)行序列化
查看全部 -
package com.imooc.io;
import java.io.FileInputStream;
import java.io.ObjectInputStream;
public class ObjectSeriaDemo1 {
public static void main(String[] args) throws Exception{
String file = "demo/obj.dat";
//1.對(duì)象的序列化
/*ObjectOutputStream oos = new ObjectOutputStream(
new FileOutputStream(file));
Student stu = new Student("10001", "張三", 20);
oos.writeObject(stu);
oos.flush();
oos.close();*/
ObjectInputStream ois = new ObjectInputStream(
new FileInputStream(file));
Student stu = (Student)ois.readObject();
System.out.println(stu);
ois.close();
}
}
查看全部 -
package com.imooc.io;
import java.io.Serializable;
public class Student implements Serializable{
private String stuno;
private String stuname;
//該元素不會(huì)進(jìn)行jvm默認(rèn)的序列化,也可以自己完成這個(gè)元素的序列化
private transient int stuage;??
public Student(String stuno, String stuname, int stuage) {
super();
this.stuno = stuno;
this.stuname = stuname;
this.stuage = stuage;
}
public String getStuno() {
return stuno;
}
public void setStuno(String stuno) {
this.stuno = stuno;
}
public String getStuname() {
return stuname;
}
public void setStuname(String stuname) {
this.stuname = stuname;
}
public int getStuage() {
return stuage;
}
public void setStuage(int stuage) {
this.stuage = stuage;
}
@Override
public String toString() {
return "Student [stuno=" + stuno + ", stuname=" + stuname + ", stuage="
+ stuage + "]";
}
private void writeObject(java.io.ObjectOutputStream s)
? ? ? ? throws java.io.IOException{
s.defaultWriteObject();//把jvm能默認(rèn)序列化的元素進(jìn)行序列化操作
s.writeInt(stuage);//自己完成stuage的序列化
}
private void readObject(java.io.ObjectInputStream s)
? ? ? ? throws java.io.IOException, ClassNotFoundException{
? s.defaultReadObject();//把jvm能默認(rèn)反序列化的元素進(jìn)行反序列化操作
? this.stuage = s.readInt();//自己完成stuage的反序列化操作
}
}
查看全部 -
?
java.io.File類用于表示文件(目錄)
File類只用于表示文件(目錄)的信息(名稱、大小等),不能用于文件內(nèi)容的訪問
RandomAccessFile java提供的對(duì)文件內(nèi)容的訪問,既可以讀文件,也可以寫文件。
RandomAccessFile支持隨機(jī)訪問文件,可以訪問文件的任意位置
(1)java文件模型
? 在硬盤上的文件是byte byte byte存儲(chǔ)的,是數(shù)據(jù)的集合
(2)打開文件
? 有兩種模式"rw"(讀寫)? "r"(只讀)
? RandomAccessFile raf = new RandomeAccessFile(file,"rw")
? 文件指針,打開文件時(shí)指針在開頭 pointer = 0;
(3) 寫方法
? ? raf.write(int)--->只寫一個(gè)字節(jié)(后8位),同時(shí)指針指向下一個(gè)位置,準(zhǔn)備再次寫入
(4)讀方法
? ?int b = raf.read()--->讀一個(gè)字節(jié)
(5)文件讀寫完成以后一定要關(guān)閉(Oracle官方說明)
序列化與基本類型序列化
1)將類型int 轉(zhuǎn)換成4byte或?qū)⑵渌麛?shù)據(jù)類型轉(zhuǎn)換成byte的過程叫序列化
? ? ?數(shù)據(jù)---->n byte
2)反序列化
? ? 將n個(gè)byte 轉(zhuǎn)換成一個(gè)數(shù)據(jù)的過程
? ? nbyte ---> 數(shù)據(jù)
3)RandomAccessFile提供基本類型的讀寫方法,可以將基本類型數(shù)據(jù)
? ?序列化到文件或者將文件內(nèi)容反序列化為數(shù)據(jù)
?IO流(輸入流、輸出流)
?字節(jié)流、字符流
?1.字節(jié)流
?1)InputStream、OutputStream
? ? InputStream抽象了應(yīng)用程序讀取數(shù)據(jù)的方式
? ? OutputStream抽象了應(yīng)用程序?qū)懗鰯?shù)據(jù)的方式?
?2)EOF = End? ?讀到-1就讀到結(jié)尾
?3)輸入流基本方法
? ?int? b = in.read();讀取一個(gè)字節(jié)無符號(hào)填充到int低八位.-1是 EOF
? ?in.read(byte[] buf)?
? ?in.read(byte[] buf,int start,int size)
4)輸出流基本方法
? out.write(int b)? 寫出一個(gè)byte到流,b的低8位
? out.write(byte[] buf)將buf字節(jié)數(shù)組都寫入到流
? out.write(byte[] buf,int start,int size)
??
?5)FileInputStream--->具體實(shí)現(xiàn)了在文件上讀取數(shù)據(jù)
?6)FileOutputStream 實(shí)現(xiàn)了向文件中寫出byte數(shù)據(jù)的方法
?7)DataOutputStream/DataInputStream
? ? 對(duì)"流"功能的擴(kuò)展,可以更加方面的讀取int,long,字符等類型數(shù)據(jù)
? ?DataOutputStream
? ? ? ? writeInt()/writeDouble()/writeUTF()
?8)BufferedInputStream&BufferedOutputStream
?這兩個(gè)流類位IO提供了帶緩沖區(qū)的操作,一般打開文件進(jìn)行寫入
?或讀取操作時(shí),都會(huì)加上緩沖,這種流模式提高了IO的性能
?從應(yīng)用程序中把輸入放入文件,相當(dāng)于將一缸水倒入到另一個(gè)缸中:
?FileOutputStream--->write()方法相當(dāng)于一滴一滴地把水“轉(zhuǎn)移”過去
?DataOutputStream-->writeXxx()方法會(huì)方便一些,相當(dāng)于一瓢一瓢把水“轉(zhuǎn)移”過去
?BufferedOutputStream--->write方法更方便,相當(dāng)于一飄一瓢先放入桶中,再從桶中倒入到另一個(gè)缸中,性能提高了
? ?
? ?
?2.字符流
?1) 編碼問題
?2)認(rèn)識(shí)文本和文本文件
?java的文本(char)是16位無符號(hào)整數(shù),是字符的unicode編碼(雙字節(jié)編碼)
?文件是byte byte byte ...的數(shù)據(jù)序列
文本文件是文本(char)序列按照某種編碼方案(utf-8,utf-16be,gbk)序列化為byte的存儲(chǔ)結(jié)果
3)字符流(Reader Writer)---->操作的是文本文本文件
字符的處理,一次處理一個(gè)字符
字符的底層任然是基本的字節(jié)序列
字符流的基本實(shí)現(xiàn)
? ?InputStreamReader? ?完成byte流解析為char流,按照編碼解析
? ?OutputStreamWriter? 提供char流到byte流,按照編碼處理??
? ?
? ?FileReader/FileWriter
?字符流的過濾器
? ?BufferedReader? ?---->readLine 一次讀一行
? ?BufferedWriter/PrintWriter? ?---->寫一行? ??
? ?
? ?
3.對(duì)象的序列化,反序列化
1)對(duì)象序列化,就是將Object轉(zhuǎn)換成byte序列,反之叫對(duì)象的反序列化?
2)序列化流(ObjectOutputStream),是過濾流----writeObject
? ?反序列化流(ObjectInputStream)---readObject
3)序列化接口(Serializable)
? ?對(duì)象必須實(shí)現(xiàn)序列化接口 ,才能進(jìn)行序列化,否則將出現(xiàn)異常
? ?這個(gè)接口,沒有任何方法,只是一個(gè)標(biāo)準(zhǔn)
?
4) transient關(guān)鍵字
? ? private void writeObject(java.io.ObjectOutputStream s)
? ? ? ? throws java.io.IOException
private void readObject(java.io.ObjectInputStream s)
? ? ? ? throws java.io.IOException, ClassNotFoundException
? ?分析ArrayList源碼中序列化和反序列化的問題
5)序列化中 子類和父類構(gòu)造函數(shù)的調(diào)用問題
查看全部 -
沒看懂的可以來看一下
查看全部 -
講了一大堆
查看全部 -
java IO 1查看全部
-
啦啦啦查看全部
-
遞歸遍歷目錄
查看全部 -
文件輸入流FileInputStream
查看全部 -
文件輸出流FileOutputStream
查看全部 -
本教程幾點(diǎn)要點(diǎn):
RandomAccessFile類的使用,可以使用其中的指針自定義讀取文件中的指定位置,實(shí)現(xiàn)分段讀取,分段存儲(chǔ);
java文件的保存方式是字節(jié)的形式保存的,byte,因此保存的文件有編碼的問題;
工程中讀取或者保存在電腦中的文件會(huì)不會(huì)有亂碼,與文件保存時(shí)的編碼,以及工程編碼屬性這兩個(gè)因素有關(guān),需要注意這點(diǎn);
類的序列化:可重寫writeObject、readObject兩個(gè)方法來自定義類的序列化方法,將某些trasient的屬性自定自定序列化。
查看全部
舉報(bào)