目錄
一:用file來進行檔案操作
1.1 file類使用的準備
1.2 File類常用方法-基本檔案操作
1.3 File類常用方法-目錄操作
?
1.4 File類常用方法-檔案屬性操作
1.5 File類常用方法-其他操作
?
二:流
2.1流的概念
2.2什么是輸入輸出流
2.3 什么是位元組流,字符流
2.4 位元組流
2.4.1 FileInputStream 和 FileOutputStream
2.4.2位元組緩沖流 BufferedInputStream 和 BufferedOutputStream
三:字符流
3.1 字符流 FileReader 和 FileWriter
public class FileReader extends InputStreamReader
3.2 、字符緩沖流 BufferedReader 和 BufferedWriter
四:位元組流對比字符流
總結:
一:用file來進行檔案操作
1.1 file類使用的準備
1.2 File類常用方法-基本檔案操作

代碼1:檢驗檔案是否存在
package com.bittech;
import java.io.File;
public class FileDemo {
public static void main(String[] args){
String path = "E:\\java_code\\file\\";
String name = "demo.txt";
String pathname = path + name;
File file = new File(pathname);
boolean res = file.exists();
System.out.println("檔案" + pathname + "是否存在: " + res);
}
}
結果如下:

代碼2:檢驗是否是目錄,檔案并洗掉
package com.bittech;
import java.io.File;
public class FileDemo {
public static void main(String[] args){
String path = "E:\\java_code\\file\\";
String name = "demo.txt";
String pathname = path + name;
File file = new File(pathname);
boolean res = file.exists();
System.out.println("檔案" + pathname + "是否存在: " + res);
res = file.isDirectory();
System.out.println("檔案" + pathname + "是否是目錄: " + res);
res = file.isFile();
System.out.println("檔案" + pathname + "是否是檔案: " + res);
file.delete();
if(!file.exists()){
System.out.println("洗掉檔案成功!");
}
else{
System.out.println("洗掉檔案失敗!");
}
}
}
結果如下:

代碼3:創建新檔案
package com.bittech;
import java.io.File;
import java.io.IOException;
public class FileDemo {
public static void main(String[] args) throws IOException {
String path = "E:\\java_code\\file\\";
String new_name = "demo1.txt";
String pathname = path + new_name;
File file = new File(pathname);
if(!file.exists()){ //注意'!', 表示取反
try {
//有創建失敗的風險,需要捕捉例外,例外如果不了解,可以先使用,不必關心細節
file.createNewFile();
}catch (IOException e){ //檔案部分例外,常見為IOException
System.out.println("檔案" + pathname + "創建失敗");
//e.printStackTrace();
}
}
else{
System.out.println("檔案" + pathname + "已經存在,不需創建");
}
}
}
1.3 File類常用方法-目錄操作
代碼1:創建指定一個或者多個目錄的路徑
package com.bittech;
import java.io.File;
import java.io.IOException;
public class FileDemo {
public static void main(String[] args) throws IOException {
String path = "E:\\java_code\\file\\";
String dir_name = "demo_dir"; //想要創建的目錄
//String dir_name = "demo_dir\\dir1\\dir2\\dir3"; //想要創建的目錄路徑
String pathname = path + dir_name;
File file = new File(pathname);
if(!file.exists()){
file.mkdir(); //創建一個空目錄
//file.mkdirs(); //創建一個可能具有多個目錄的路徑
}
else{
System.out.println("路徑已經存在,不需創建");
}
}
}
結果:
![]()
代碼2:獲取父路徑
package com.bittech;
import java.io.File;
import java.io.IOException;
public class FileDemo {
public static void main(String[] args) throws IOException {
String path = "E:\\java_code\\file\\";
String dir_name = "demo_dir\\dir1\\dir2\\dir3";
String pathname = path + dir_name;
File file = new File(pathname);
System.out.println(file.getParent());
}
}
結果:

代碼3:獲取父目錄 File 物件,并在父目錄下,創建檔案 demo.java
package com.bittech;
import java.io.File;
import java.io.IOException;
public class FileDemo {
public static void main(String[] args) throws IOException {
String path = "E:\\java_code\\file\\";
String dir_name = "demo_dir\\dir1\\dir2\\demo.java";
String pathname = path + dir_name;
File file = new File(pathname);
File pfile = file.getParentFile(); //獲取父目錄File物件
if(!pfile.exists()){//檢測路徑是否存在,不存在創建
pfile.mkdirs();
//獲取File物件的絕對路徑,后面學,這個先用起來
System.out.println("路徑" + pfile.getAbsolutePath() + "不存在,創建");
}
if(!file.exists()){
file.createNewFile();
}
}
}
結果:
![]()
1.4 File類常用方法-檔案屬性操作

代碼1:獲取示例資訊
package com.bittech;
import java.io.File;
import java.io.IOException;
import java.util.Date;
public class FileDemo {
public static void main(String[] args) throws IOException {
String path = "E:\\java_code\\file\\";
String name = "demo.txt";//可以替換成你想檢測的檔案
String pathname = path + name;
File file = new File(pathname);
if(!file.exists()){
file.createNewFile();
}
System.out.println("檔案 " + name + "size : " + file.length());
//Date類我們后面學
System.out.println("檔案 " + name + "最近修改時間: " + new
Date(file.lastModified()));
}
}
結果:

1.5 File類常用方法-其他操作
代碼1:列出desktop目錄中的全部組成
package com.bittech;
import java.io.File;
import java.io.IOException;
import java.util.Date;
public class FileDemo {
public static void main(String[] args) throws IOException {
// 要操作的檔案
File file = new File("C:\\Users\\whb\\Desktop");
// 保證是個目錄且存在
if (file.exists() && file.isDirectory()) {
// 列出目錄中的全部內容
File[] result = file.listFiles();
for (File file2 : result) {
System.out.println(file2);
}
}
}
}
二:流
2.1流的概念
2.2什么是輸入輸出流
2.3 什么是位元組流,字符流
2.4 位元組流
2.4.1 FileInputStream 和 FileOutputStream
2.4.2位元組緩沖流 BufferedInputStream 和 BufferedOutputStream
示例使用 BufferedInputStream 和 BufferedOutputStream 實作檔案拷貝:
import java.io.*;
public class TestBufferStreamCopy {
public static void main(String[] args) throws IOException {
File file=new File("bit.txt");
if(!file.isFile()){ return; }
BufferedInputStream bfis=new BufferedInputStream(new
FileInputStream(file));
BufferedOutputStream bfos=new BufferedOutputStream(new
FileOutputStream("src\\"+file.getName()));//copy到src目錄下
byte bytes[]=new byte[1024];
int temp=0; //邊讀邊寫
while ((temp=bfis.read(bytes))!=-1){//讀
bfos.write(bytes,0,temp); //寫
}
bfos.flush();
bfos.close();
bfis.close();
System.out.println("copy成功!");
}
}
有無緩沖效率的對比(以讀為例)
import java.io.*;
public class BufferByte {
public static void main(String[] args) throws IOException {
//bit.txt 大小大約為1500KB
File file=new File("bit.txt");
//緩沖流
BufferedInputStream bfis=new BufferedInputStream(new
FileInputStream(file));
int temp=0;
long time=System.currentTimeMillis();//獲取當前時間至1970-1-1的毫秒數
while ((temp=bfis.read())!=-1){
//System.out.print((char) temp);
}
time=System.currentTimeMillis()-time;
bfis.close();
System.out.println("緩沖流讀:"+time+"ms");
//非緩沖
FileInputStream fis=new FileInputStream(file);
temp=0;
time=System.currentTimeMillis();
while ((temp=fis.read())!=-1){
//System.out.print((char) temp);
}
time=System.currentTimeMillis()-time;
fis.close();
System.out.println("非緩沖區讀:"+time+"ms");
}
}
結果輸出:

三:字符流
3.1 字符流 FileReader 和 FileWriter
public class FileReader extends InputStreamReader
示例使用 FileReader 和 FileWriter 復制檔案:
public class CopyFileDemo {
public static void main(String[] args) throws IOException {
方法 解釋
BufferedReader(Reader in) 創建使用默認大小的輸入緩沖區的緩沖字符輸入
流,
BufferedReader(Reader in, int
sz)
創建使用指定大小的輸入緩沖區的緩沖字符輸入
流,
方法 解釋
BufferedWriter(Writer out) 創建使用默認大小的輸出緩沖區的緩沖字符輸出流,
BufferedWriter(Writer out, int
sz)
創建一個新的緩沖字符輸出流,使用給定大小的輸出緩
沖區,
2、字符緩沖流 BufferedReader 和 BufferedWriter
為了提高字符流讀寫的效率,引入了緩沖機制,進行字符批量的讀寫,提高了單個字符讀寫的效率,
BufferedReader 用于加快讀取字符的速度, BufferedWriter 用于加快寫入的速度,
BufferedReader 和 BufferedWriter 類各擁有 8192個 字符的緩沖區,當 BufferedReader在 讀取文
本檔案時,會先盡量從檔案中讀入字符資料并放滿緩沖區,而之后若使用read()方法,會先從緩沖區中
進行讀取,如果緩沖區資料不足,才會再從檔案中讀取,使用 BufferedWriter 時,寫入的資料并不會
先輸出到目的地,而是先存盤至緩沖區中,如果緩沖區中的資料滿了,才會一次對目的地進行寫出,
從字符輸入流讀取文本,緩沖字符,以提供字符,陣列和行的高效讀取
將文本寫入字符輸出流,緩沖字符,以提供單個字符,陣列和字串的高效寫入,
示例使用 BufferedReader 和 BufferedWriter 進行檔案拷貝
//創建輸入流物件
FileReader fr = new FileReader("E:\\bit\\bitSrc.java");
//創建輸出流物件
FileWriter fw = new FileWriter("E:\\bit\\bitCopy.java");
//讀寫資料
int ch;
while((ch=fr.read())!=-1) {
fw.write(ch);
}
//釋放資源
fw.close();
fr.close();
}
3.2 、字符緩沖流 BufferedReader 和 BufferedWriter
將文本寫入字符輸出流,緩沖字符,以提供單個字符,陣列和字串的高效寫入,

示例使用 BufferedReader 和 BufferedWriter 進行檔案拷貝
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class FileWrite {
public static void main(String[] args) throws IOException {
FileReader reader=new FileReader("E:\\BIT\\bit.txt");
BufferedReader bReader=new BufferedReader(reader);
FileWriter writer=new FileWriter(":\\BIT\\bit2.txt");
BufferedWriter bWriter=new BufferedWriter(writer);
String content="";
//readLine一行一行的讀取
while((content=bReader.readLine())!=null){
//\r\n換行
bWriter.write(content+"\r\n");
}
/**
* 關閉流的順序:
* 當A依賴B的時候先關閉A,再關閉B
* 帶緩沖的流最后關閉的時候會執行一次flush
*/
reader.close();
bReader.close();
bWriter.close();
writer.close();
}
}
四:位元組流對比字符流
總結:
碼文不易,大家多多支持,望不吝賜教,感激不盡!越來越好!!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/317910.html
標籤:java
上一篇:團團的踩坑日記(快取篇)


