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