------Java教育訓練、Android教育訓練、iOS教育訓練、.Net教育訓練、期待與您交流! -------
一、File類
1、File類概述
該類對檔案系統的中的檔案以及檔案夾進行對象的封裝,友善對檔案檔案夾的屬性資訊如檔案名、建立修改時間、大小、可讀可寫屬性等進行操作,File對象可以作為參數傳遞給流的構造函數
File f1 = new file(“c:\\aaa\\a.txt”);
File f2 = new File(“c:\\aaa”,”b.txt”);
File d = new File(“c:\\abc”);
File f3 = new File(d,”c.txt”);
名稱分隔符
C:\\aaa\\eds.txt 同 “C:”+ File.separator+”abc”++ File.separator+“aaa.txt”
2、File類常見方法:
1)建立
boolean createNewFile();在指定位置建立檔案,如果該檔案已經存在則不建立傳回false,和輸出流不一樣,輸出流對象一建立
boolean mkdir()建立檔案夾
boolean mkdirs()建立多級檔案夾
2)删除
boolean delete();删除失敗傳回false
Void deleteOnExit();在程式退出時删除指定檔案
3)判斷
boolean canExcause();是否可以執行
canRead();
canWrite();
boolean exist();
Boolean isFile();是否是檔案,不存在為false,判斷是檔案或檔案夾時必須判斷是否存在exist();
Boolean isDirectory()是否是目錄
Boolean isHidden() 是否是隐藏檔案
Boolean isAbsolute();是否是絕對路徑
4)擷取資訊
getName();
getPatn();擷取相對路徑
getParent();擷取父目錄,該方法傳回new File()裡的檔案上一級目錄
getAbsolutePath();擷取絕對路徑傳回值可以是String 或File類
lastModified();最後修改時間
long Length();
5)移動 renameTo()例把“C:\\a.txt”) 移動到“D:\\a.txt”
File a = new File(“C:\\a.txt”);
File b = new File(“D:\\a.txt”);
a.renameTo(b);
例:遞歸方法列出目錄下所有内容:
Public static void main(String[] args)
{
File dir = new File(“D:\\JAVA基礎視訊”);
showDir(dir);
}
Public static void showDir(File dir)
{
System.out.println(dir);
File[] files = dir.listFiles();
For(int x= 0;x<files.length;x++)
{
if(file[x].isDirectory())
showDir(files[x]);
else
System.out.println(files[x]);
}
}
删除帶内容的目錄:
原理:windows删除從裡到外删除
Public static void removeDir(File dir)
{
File[] files = dir.listFiles();
For(int x=0;x<files.length;x++)
{
if(files[x].isHidden()&&files[x].isDirectory())
removeDir(files[x]);
}
}
二、其他流介紹
1、序列流
構造函數
SequenceInputStream(InputStream s1, InputStream s2)
SequenceOutputStream(OutputStream s1, OutputStream s2)
例:合并多個流:
public static void hebingSequenceInputStream() throws Exception {
InputStream in1 = new FileInputStream("c:/a.txt");
InputStream in2 = new FileInputStream("c:/b.txt");
InputStream in3 = new FileInputStream("c:/c.txt");
LinkedHashSet<InputStream> set = new LinkedHashSet<InputStream>();
set.add(in1);
set.add(in2);
set.add(in3);
final Iterator<InputStream> iter = set.iterator();
SequenceInputStream sin = new SequenceInputStream(
new Enumeration<InputStream>() {
@Override
public boolean hasMoreElements() {
return iter.hasNext();
}
@Override
public InputStream nextElement() {
return iter.next();
}
});
FileOutputStream out = new FileOutputStream("c:/z.txt");
for (int b = -1; (b = sin.read()) != -1;) {
out.write(b);
}
sin.close();
out.close();
}
例:切割檔案
FileInputStream fis = new FileInputStream(“C:\\123.bmp”);
FileOutputStream fos = null;
Byte[] buf = new byte[1024*1024];
Int len = 0;
Int count =1;
While(len = fis.read(buf)!=-1)
{
Fos = new FileOutputStream((count++) +“.txt”);
Fos.write(buf,0,len);
Fos.close();
}
Fis.close();
2、對象的序列化
對象的序列化:将記憶體中的對象直接寫入到檔案裝置中 ;對象的反序列化: 将檔案裝置中持久化的資料轉換為記憶體對象。
ObjectInputStream ObjectOutputStream
存
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(“abc.txt”))
oos.writeObject(new Person(“lisi”,39));
oos.close();
讀
ObjectInputStream ois = new ObjectInputStream (new FileInputStream(“abc.txt”))
Person p = (Person)ois.readObject();
System.out.println(p);
ois.close();
注:需要被序列化的類必須是實作Serializable接口,該接口中沒有描述任何的屬性和方法,稱之為标記接口。如果對象沒有實作接口Serializable,在進行序列化時會抛出:NotSerializableException 異常。
3、Properties
Properties 是hashtable的子類,可用于鍵值對形式的配置檔案也就是說它具備map集合的特點.Properties:該集合不需要泛型,因為該集合中的鍵值對都是String類型。
Map
|--Hashtable
|--Properties
Properties常用方法:
1)存入鍵值對:setProperty(key,value);
Properties prop = new Properties();
prop.setProperty(“zhangsan”,”30”);
2)擷取指定鍵對應的值value getProperty(key);
String value = prop.getProperty(“lisi”);
3)擷取集合中所有鍵元素:Enumeration propertyNames();
在jdk1.6版本給該類提供一個新的方法。
Set<String> names = prop.stringPropertyNames();
For(String s:names)
{
String s = prop.getProperty(s);
]
4)列出該集合中的所有鍵值對,可以通過參數列印流指定列出到的目的地。
list(PrintStream);
list(PrintWriter);
5)可以将流中的規則資料加載進行集合,并稱為鍵值對。
load(InputStream):
jdk1.6版本。提供了新的方法load(Reader):
6,可以将集合中的資料進行指定目的的存儲。
store(OutputStram,String comment)方法。
jdk1.6版本。提供了新的方法 store(Writer ,String comment);使用該方法存儲時,會帶着當時存儲的時間。
4、列印流
1,位元組列印流PrintStream,System.out對應的類型就是PrintStream。
它的構造函數可以接收三種資料類型的值。
1)字元串路徑。
2)File對象。
3)OutputStream。
列印流的三種方法
void print(資料類型 變量)
println(資料類型 變量) 提供換行,自動重新整理
printf(String format, Object... args) 可以自定資料格式
JDK1.5之後Java對PrintStream進行了擴充,增加了格式化輸出方式,可以使用printf()重載方法直接格式化輸出。但是在格式化輸出的時候需要指定輸出的資料類型格式。
2、PrintWriter是一個字元列印流。
構造函數可以接收四種類型的值。對于1,2類型的資料,還可以指定編碼表。也就是字元集。對于3,4類型的資料,可以指定自動重新整理。
1,字元串路徑。
2,File對象。
3,OutputStream
4,Writer
注意:該自動重新整理值為true時,隻有三個方法可以用:println,printf,format.
PrintWrter pw = newPrintWriter(new BufferdWriter(new OutputSteamWriter(newFileOutputStream("a.txt"),"utf-8")),true);
5、 操作數組的流對象
1)位元組數組 ByteArrayInputStream以及ByteArrayOutputStream
toByteArray();
toString();
writeTo(OutputStream);
2)字元數組 CharArrayReader以及CharArrayWriter
對于這些流,源是記憶體。目的也是記憶體。而且這些流并未調用系統資源。使用的就是記憶體中的數組。是以這些在使用的時候不需要close。
注:操作數組的讀取流在構造時,必須要明确一個資料源。是以要傳入相對應的數組。
對于操作數組的寫入流,在構造函數可以使用空參數。因為它内置了一個可變長度數組作為緩沖區。
6、操作基本資料類型的流對象
DataInputStream 從資料流讀取位元組,并将它們轉換為正确的基本資料類型值或字元串。
DataOutputStream 将基本類型的值或字元串轉換為位元組,并且将位元組輸出到資料流。
1)DataInputStream類繼承FilterInputStream類,并實作了DataInput接口。
DataInputStream
操作基本資料類型的方法:
int readInt():一次讀取四個位元組,并将其轉成int值。
boolean readBoolean():一次讀取一個位元組。
short readShort();
long readLong();
String readUTF():按照utf-8修改版讀取字元。注意,它隻能讀writeUTF()寫入的字元資料。
2)DataOutputStream(OutputStream):
操作基本資料類型的方法:
writeInt(int):一次寫入四個位元組。write(int)隻将該整數的最低一個8位寫入。剩餘三個8位丢棄。
writeBoolean(boolean);
writeShort(short);
writeLong(long);
writeUTF(String):按照utf-8修改版将字元資料進行存儲。隻能通過readUTF讀取。