java中的File的使用
java中File的基礎(chǔ)使用
文件的幾個(gè)常用方法
創(chuàng)建文件句柄。
File是java.io里邊的類。
如下代碼是創(chuàng)建文件的方法:
//獲取文件的句柄
File file=new File("f:\\java\\code\\file\\1.txt");
//如果是非后綴文件也是可以的
File file2=new File("f:\\java\\code\\file\\2");
try {
//創(chuàng)建文件
file.createNewFile();
file2.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//file.isDirectory() and file.isFile() 是用來判斷是文件還是目錄的。
System.out.println(file.isFile());
System.out.println("Is file2 file:"+file2.isFile());
目錄的創(chuàng)建
File file0=new File("f:\\java\\code\\file\0.txt");
File file1=new File("f:\\java\\code\\file");
//file1.exists();判斷目錄是否存在,如果存在才創(chuàng)建目錄
System.out.println(file0.exists());
System.out.println(file1.exists());
//目錄的創(chuàng)建
File mk1=new File(file1,"dir");
//如果目錄不存在則創(chuàng)建目錄
if(!mk1.exists()) {
mk1.mkdir();
//如果創(chuàng)建多級(jí)目錄則是mk1.mkdirs();
}
輸入流FileInputStream
輸入流的使用和實(shí)例,如下代碼:
try {
FileInputStream fis=new FileInputStream("f:\\java\\code\\file\\1.txt");
//fis.read()每次只能讀取一個(gè)字節(jié),如果沒有字節(jié)讀取了,則返回-1
int n=0;
while((n=fis.read())!=-1) {
//讀取出來是一個(gè)ascii碼,需要轉(zhuǎn)成字符
System.out.print((char)n);
}
fis.close();//關(guān)閉輸入流
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch(IOException e) {
e.printStackTrace();
}
FileInputStream讀取到的字節(jié)放入到字節(jié)數(shù)組中,然后轉(zhuǎn)換成字符,如下:
//讀取的字節(jié)放入到容器中
try {
FileInputStream fis=new FileInputStream("f:\\java\\code\\file\\1.txt");
//創(chuàng)建一個(gè)字節(jié)的容器
byte[] b=new byte[100];
//讀取到的字節(jié)放入到這個(gè)容器里邊
fis.read(b);
//把字節(jié)容器的內(nèi)容轉(zhuǎn)換成字符
System.out.println(new String(b));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch(IOException e) {
e.printStackTrace();
}
輸出流FileOutputStream
使用如下:
FileOutputStream fot;
//如果第二個(gè)參數(shù)為true是追加,否則是覆蓋的寫入方式
try {
fot =new FileOutputStream("f:\\java\\code\\file\\1.txt",true);
fot.write('a');//只能增加一個(gè)字符
fot.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch(IOException e) {
e.printStackTrace();
}
java IO拷貝圖片
如下代碼:
try {
//讀取文件
FileInputStream fis=new FileInputStream("f:\\java\\code\\file\\timg.jpg");
//讀取的文件寫入成新的文件
FileOutputStream fos=new FileOutputStream("f:\\java\\code\\file\\timg2.jpg");
//每次讀取多少
byte [] b=new byte[1024];
//循環(huán)讀取
int n=0;
while((n=fis.read(b))!=-1) {
//把讀取到的內(nèi)容寫入到輸出流里邊,如果參數(shù)是0到n表示的是每次讀取個(gè)數(shù)0到n的位置而不是整個(gè)b數(shù)組
//每次讀取都是byte的大小,如果最后一次讀取少于byte數(shù)組大小也以這個(gè)大小讀取,所以設(shè)置了第2個(gè)參數(shù)和第三個(gè)參數(shù)
fos.write(b,0,n);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch(IOException e) {
e.printStackTrace();
}
java的緩沖流
BufferInputStream
BufferOutputStream
實(shí)例代碼如下:
FileInputStream fis;
FileOutputStream fos;
try {
fis = new FileInputStream("f:\\java\\code\\file\\1.txt");
fos =new FileOutputStream("f:\\java\\code\\file\\2.txt");
//緩沖輸入流,里邊是放輸入流的
BufferedInputStream bis=new BufferedInputStream(fis);
//緩沖輸出流放里邊放輸出流作為參數(shù)
BufferedOutputStream bos=new BufferedOutputStream(fos);
//輸出流讀取的內(nèi)容是在緩沖里邊,如果緩沖沒有滿,則不會(huì)寫入到文件,如果寫入到文件,需要強(qiáng)制清除緩沖如:flush或者close
bos.write('a');
bos.flush();//清除緩沖流把內(nèi)容寫入到文件。
System.out.print((char)bis.read());//讀取的結(jié)果是h
bos.close();//關(guān)閉流,也會(huì)有寫入文件的強(qiáng)制作用
fos.close();
fis.close();
bis.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch(IOException e) {
e.printStackTrace();
}
字符字節(jié)轉(zhuǎn)換流
InputStreamReader
OutputStreamWriter
如下代碼使用:
/**
* 字符字節(jié)轉(zhuǎn)換流的使用其實(shí)和緩沖流是比較類似的,就是從之前的字節(jié)容器存儲(chǔ)變成了字節(jié)容器存儲(chǔ)
*/
FileInputStream fis;
FileOutputStream fos;
try {
fis = new FileInputStream("f:\\java\\code\\file\\1.txt");
fos=new FileOutputStream("f:\\java\\code\\file\\3.txt");
InputStreamReader isr=new InputStreamReader(fis);
OutputStreamWriter osr=new OutputStreamWriter(fos);
int n=0;
char[] cbuf=new char[10];
while((n=isr.read(cbuf))!=-1) {
System.out.print(cbuf);//可以直接輸出,因?yàn)槭亲止?jié)轉(zhuǎn)換了字符
//把讀取到內(nèi)容寫入到文件里邊
osr.write(cbuf);
osr.flush();//強(qiáng)制輸入到文件里邊。
}
//關(guān)閉流的操作就省略了
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch(IOException e) {
e.printStackTrace();
}
java中IO對(duì)象化和反對(duì)象化
ObjectInputStream 參數(shù)是輸入流 fis
ObjectOutputStream 參數(shù)是輸出流 ois
ois.writeObject(對(duì)象) 寫入對(duì)象到某個(gè)文件里邊
oos.readObject();//讀取后的結(jié)果強(qiáng)制轉(zhuǎn)化為對(duì)象。