檔案操作與IO流基礎
阿新 • • 發佈:2018-11-30
檔案類File
File file=new File("D:\\java\\zs2\\eatfood.txt");
if(file.isFile()){
System.out.println("是個檔案");
}
else{
System.out.println("沒有");
try {
file.createNewFile();
System.out.println("建立新檔案");
} catch (IOException e) {
e.printStackTrace();
}
}
System.out.println("名稱"+file.getName());
System.out.println("相對路徑"+file.getPath());
System.out.println("絕對路徑"+file.getAbsolutePath());
System.out.println("檔案大小"+file.length()+"B");
但是File類不管檔案內容。
IO流
輸入輸出流分為兩大類,一個是8位位元組流,一個是16位字元流
這樣就有四個基類
InputStream
OutputStream
Reader
Writer
四個基類都是抽象類,可以用它們的子類建立物件對檔案內容進行修改。
前面加一個File就是他們的其中一個子類,用法相似。
FileOutputStream fileout;
try {
fileout=new FileOutputStream("D:\\java\\zs2\\eatfood.txt",true);//第二個引數可有可無,是否追加,預設不追加。
String str="what a lucky man\n" ;
byte[] b=str.getBytes();
fileout.write(b,0,b.length);
fileout.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
FileInputStream filein;
try {
filein=new FileInputStream("D:\\java\\zs2\\eatfood.txt");
int data;
System.out.println("可讀位元組數:"+filein.available());
System.out.println("檔案內容:");
while((data=filein.read())!=-1){//利用read()逐個存入變數
System.out.print((char)data);
}
filein.close();
} catch (FileNotFoundException e) {//無法找到檔案
e.printStackTrace();
} catch (IOException e) {//IO錯誤
e.printStackTrace();
}
FileWriter filewrit;
BufferedWriter bufferwrit;
try {
filewrit=new FileWriter("D:\\java\\zs2\\eatfood.txt");
bufferwrit=new BufferedWriter(filewrit);
filewrit.write("I am Zhangshuo ");
filewrit.append("hhh\n");//這倆好像一樣的功能
bufferwrit.write("I am so cool");
bufferwrit.newLine();
bufferwrit.write("what about you?");
bufferwrit.flush();//重新整理就相當於輸到檔案中
filewrit.close();
}catch (IOException e) {
e.printStackTrace();
}
FileReader fileread;
try {
fileread=new FileReader("D:\\java\\zs2\\eatfood.txt");
char[] str=new char[300];
fileread.read(str); //利用read(char []);直接存到陣列中
System.out.println();
for(char c:str)
System.out.print(c);
fileread.close();
} catch (FileNotFoundException e){
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Buffered加在這四個基類前面就是另四個子類。
BufferedInputStream
BufferedOutputStream
BufferedReader
BufferedWriter
帶參構造有兩個引數,第一個是基類的物件,第二個是int
表示開一個制定大小的緩衝區,如果沒有第二個引數,就是預設大小。避免每次都進行字元編碼的轉換,多次使用的時候提高效率。
Buffered基類和File基類用法類似