寫在前面 今天繼續講JavaIO流的知識! Java 文件與流操作 File 類 File 類用於表示文件和文件夾的抽象。 構造方法 public File(String pathname): 使用路徑名創建 File 對象。 public File(String parent, String ch ...
寫在前面
今天繼續講JavaIO流的知識!
Java 文件與流操作
File 類
File
類用於表示文件和文件夾的抽象。
構造方法
public File(String pathname)
: 使用路徑名創建File
對象。public File(String parent, String child)
: 使用父目錄和子目錄名稱創建File
對象。public File(File parent, String child)
: 使用父File
對象和子目錄名稱創建File
對象。
成員方法
創建功能
public boolean createNewFile()
: 創建一個新文件。public boolean mkdir()
: 創建單個目錄。public boolean mkdirs()
: 創建目錄,包括必要但不存在的父目錄。
刪除功能
public boolean delete()
: 刪除文件或目錄。
重命名功能
public boolean renameTo(File dest)
: 重命名文件或目錄。
判斷功能
public boolean isDirectory()
: 判斷是否為目錄。public boolean isFile()
: 判斷是否為文件。public boolean exists()
: 判斷文件或目錄是否存在。public boolean canRead()
: 判斷是否可讀。public boolean canWrite()
: 判斷是否可寫。public boolean isHidden()
: 判斷是否為隱藏文件。
基本獲取功能
public String getAbsolutePath()
: 獲取絕對路徑。public String getPath()
: 獲取路徑。public String getName()
: 獲取文件名。public long length()
: 獲取文件長度。public long lastModified()
: 獲取最後修改時間。
高級獲取功能
public String[] list()
: 獲取目錄中的文件和目錄名稱。public File[] listFiles()
: 獲取目錄中的File
對象數組。
文件名稱過濾器
public String[] list(FilenameFilter filter)
: 使用文件名過濾器獲取文件和目錄名稱。public File[] listFiles(FilenameFilter filter)
: 使用文件名過濾器獲取File
對象數組。
位元組流
位元組輸入流
- 抽象父類:
InputStream
- 實現子類:
FileInputStream
- 創建對象的方式:
FileInputStream fis = new FileInputStream("路徑");
- 讀取數據的方式:
- 一次讀取一個位元組:
int i = 0; while ((i = fis.read()) != -1) { System.out.print((char) i); }
- 一次讀取一個位元組數組:
byte[] bytes = new byte[1024]; int length = 0; while ((length = fis.read(bytes)) != -1) { String s = new String(bytes, 0, length); System.out.print(s); }
- 一次讀取一個位元組數組的一部分。
byte[] bytes = new byte[1024]; int length = 0; while ((length = fis.read(bytes)) != -1) { String s = new String(bytes, 這裡寫從哪個索引開始截取, 這裡寫自己想要截取的長度); System.out.print(s); }
- 一次讀取一個位元組:
- 創建對象的方式:
BufferedInputStream
- 創建對象的方式:
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("路徑"));
- 讀取數據的方式:
- 一次讀取一個位元組:
int i = 0; while ((i = bis.read()) != -1) { System.out.print((char) i); }
- 一次讀取一個位元組數組:
byte[] bytes = new byte[1024]; int length = 0; while ((length = bis.read(bytes)) != -1) { String s = new String(bytes, 0, length); System.out.print(s); }
- 一次讀取一個位元組數組的一部分。
byte[] bytes = new byte[1024]; int length = 0; while ((length = bis.read(bytes)) != -1) { String s = new String(bytes, 這裡寫從哪個索引開始截取, 這裡寫自己想要截取的長度); System.out.print(s); }
- 一次讀取一個位元組:
- 創建對象的方式:
- 實現子類:
位元組輸出流
- 抽象父類:
OutputStream
- 實現子類:
-
FileOutputStream
- 創建對象的方式:
#創建文件輸出流以寫入由指定的 File對象表示的文件。 FileOutputStream(File file) #創建文件輸出流以寫入由指定的 File對象表示的文件。 FileOutputStream(File file, boolean append) #創建文件輸出流以指定的名稱寫入文件。 FileOutputStream(String name) #創建文件輸出流以指定的名稱寫入文件。 FileOutputStream(String name, boolean append)
- 寫數據的方式:
- 寫一個位元組:
fos.write(i);
- 寫一個位元組數組:
byte[] bytes = {97, 98, 99}; fos.write(bytes);
- 寫位元組數組的一部分:
byte[] bytes = {97, 98, 99}; fos.write(bytes, 1, 2);
- 寫一個位元組:
-
BufferedOutputStream
- 創建對象的方式:
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("路徑"));
- 寫數據的方式(註:這種方式寫文件在寫完之後需要flush一下,不然不會成功寫入,後面說的以file對象進行傳入參數的輸入流基本上都要寫完刷一下才有內容寫入):
- 寫一個位元組:
bos.write(i);
- 寫一個位元組數組:
byte[] bytes = {97, 98, 99}; bos.write(bytes);
- 寫位元組數組的一部分:
byte[] bytes = {97, 98, 99}; bos.write(bytes, 1, 2);
- 寫一個位元組:
- 創建對象的方式:
-
- 實現子類:
字元流
字元流是基於位元組流的,並加上了編碼表的支持。
字元輸入流
- 抽象父類:
Reader
- 實現子類:
InputStreamReader
- 創建對象的方式:
InputStreamReader isr = new InputStreamReader(new FileInputStream("路徑"));
- 讀取數據的方式:
- 一次讀取一個字元:
int i = 0; while ((i = isr.read()) != -1) { System.out.print((char) i); }
- 一次讀取一個字元數組:
char[] chars = new char[1024]; int length = 0; while ((length = isr.read(chars)) != -1) { String s = new String(chars, 0, length); System.out.print(s); }
- 一次讀取一個字元數組的一部分。
char[] chars = new char[1024]; int length = 0; while ((length = isr.read(chars)) != -1) { String s = new String(chars, 開始索引, 要讀的具體長度); System.out.print(s); }
- 一次讀取一個字元:
- 創建對象的方式:
FileReader
- 創建對象的方式:
FileReader fr = new FileReader("路徑");
- 讀取數據的方式:
- 一次讀取一個字元:
int i = 0; while ((i = fr.read()) != -1) { System.out.print((char) i); }
- 一次讀取一個字元數組:
char[] chars = new char[1024]; int length = 0; while ((length = fr.read(chars)) != -1) { String s = new String(chars, 0, length); System.out.print(s); }
- 一次讀取一個字元數組的一部分。
char[] chars = new char[1024]; int length = 0; while ((length = fr.read(chars)) != -1) { String s = new String(chars, 開始索引, 要讀的具體長度); System.out.print(s); }
- 一次讀取一個字元:
- 創建對象的方式:
BufferedReader
- 創建對象的方式:
- 方式1:
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("路徑")));
- 方式2(簡化版):
BufferedReader br = new BufferedReader(new FileReader("路徑"));
- 方式1:
- 讀取數據的方式:
- 一次讀取一個字元:
int i = 0; while ((i = br.read()) != -1) { System.out.print((char) i); }
- 一次讀取一個字元數組:
char[] chars = new char[1024]; int length = 0; while ((length = br.read(chars)) != -1) { String s = new String(chars, 0, length); System.out.print(s); }
- 一次讀取一個字元數組的一部分。
char[] chars = new char[1024]; int length = 0; while ((length = br.read(chars)) != -1) { String s = new String(chars, 開始索引, 具體長度); System.out.print(s); }
- 一次讀取一行數據(不包括換行符):
String line = null; while ((line = br.readLine()) != null) { System.out.print(line); }
- 一次讀取一個字元:
- 創建對象的方式:
- 實現子類:
字元輸出流
- 抽象父類:
Writer
- 實現子類:
-
OutputStreamWriter
- 創建對象的方式:
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("路徑"));
- 寫數據的方式:
- 一次寫一個字元。
osw.write(i);
- 一次寫一個字元數組。
char[] chars = {'a', 'b', 'c'}; osw.write(chars);
- 一次寫一個字元數組的一部分。
char[] chars = {'a', 'b', 'c'}; osw.write(chars, 1, 2);
- 一次寫一個字元串。
osw.write("example");
- 一次寫一個字元串的一部分。
osw.write("example", 1, 4);
- 創建對象的方式:
-
FileWriter
- 創建對象的方式:
FileWriter fw = new FileWriter("路徑");
- 寫數據的方式:
- 一次寫一個字元。
fw.write(i);
- 一次寫一個字元數組。
char[] chars = {'a', 'b', 'c'}; fw.write(chars);
- 一次寫一個字元數組的一部分。
char[] chars = {'a', 'b', 'c'}; fw.write(chars, 1, 2);
- 一次寫一個字元串。
fw.write("example");
- 一次寫一個字元串的一部分。
fw.write("example", 1, 4);
- 一次寫一個字元。
- 創建對象的方式:
-
BufferedWriter
- 創建對象的方式:
- 方式1:
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("路徑")));
- 方式2(簡化版):
BufferedWriter bw = new BufferedWriter(new FileWriter("路徑"));
- 方式1:
- 寫數據的方式:
- 一次寫一個字元:
bw.write(i);
- 一次寫一個字元數組:
char[] chars = {'a', 'b', 'c'}; bw.write(chars);
- 一次寫一個字元數組的一部分:
char[] chars = {'a', 'b', 'c'}; bw.write(chars, 1, 2);
- 一次寫一個字元串:
bw.write("example");
- 一次寫一個字元串的一部分:
bw.write("example", 1, 4);
- 特殊功能:自動生成換行符:
bw.newLine();
- 一次寫一個字元:
- 創建對象的方式:
-
- 實現子類:
文件的讀寫複製
位元組流
- 普通位元組輸入輸出流:一次讀寫一個位元組。
FileInputStream inputPath = new FileInputStream("inputpath");
FileOutputStream outputPath = new FileOutputStream("outpath");
int i = 0;
while ((i = inputPath.read()) != -1) {
outputPath.write((char) i);
}
inputPath.close();
outputPath.close();
- 帶緩衝的位元組輸入輸出流:一次讀寫一個位元組。
BufferedInputStream inputpath = new BufferedInputStream(new FileInputStream("inputpath"));
BufferedOutputStream outputpath = new BufferedOutputStream(new FileOutputStream("outpath"));
int i = 0;
while ((i = inputpath.read()) != -1) {
outputpath.write((char) i);
outputpath.flush;
}
inputpath.close();
outputpath.close();
- 普通位元組輸入輸出流:一次讀寫一個位元組數組。
FileInputStream inputPath = new FileInputStream("inputpath");
FileOutputStream outputPath = new FileOutputStream("outpath");
byte[] bytes = new byte[1024];
int length = 0;
while ((length = inputPath.read(bytes)) != -1) {
outputPath.write(bytes, 0, length);
outputPath.flush();
}
inputPath.close();
outputPath.close();
- 帶緩衝的位元組輸入輸出流:一次讀寫一個位元組數組(此方式的效率最高)。
BufferedInputStream inputpath = new BufferedInputStream(new FileInputStream("inputpath"));
BufferedOutputStream outputpath = new BufferedOutputStream(new FileOutputStream("outpath"));
byte[] bytes = new byte[1024];
int length = 0;
while ((length = inputpath.read(bytes)) != -1) {
outputpath.write(bytes, 0, length);
outputpath.flush();
}
inputpath.close();
outputpath.close();
字元流
- 普通字元輸入輸出流:一次讀寫一個字元。
InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream("inputpath"));
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(new FileOutputStream("outputpath"));
int i = 0;
while ((i = inputStreamReader.read()) != -1) {
outputStreamWriter.write(i);
outputStreamWriter.flush();
}
inputStreamReader.close();
outputStreamWriter.close();
- 普通字元輸入輸出流:一次讀寫一個字元數組。
InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream("inputpath"));
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(new FileOutputStream("outputpath"));
char[] chars = new char[1024];
int length = 0;
while ((length = inputStreamReader.read(chars)) != -1) {
outputStreamWriter.write(chars,0,length);
outputStreamWriter.flush();
}
inputStreamReader.close();
outputStreamWriter.close();
- 簡化寫法字元輸入輸出流:一次讀寫一個字元。
FileReader fileReader = new FileReader("inputpath");
FileWriter fileWriter = new FileWriter("outputpath");
int i = 0;
while ((i = fileReader.read()) != -1) {
fileWriter.write(i);
fileWriter.flush();
}
fileWriter.close();
fileReader.close();
- 簡化寫法字元輸入輸出流:一次讀寫一個字元數組。
FileReader fileReader = new FileReader("inputpath");
FileWriter fileWriter = new FileWriter("src/com/shujia/data/b.txt");
char[] chars = new char[1024];
int length = 0;
while ((length = fileReader.read(chars)) != -1) {
fileWriter.write(chars,0,length);
fileWriter.flush();
}
fileWriter.close();
fileReader.close();
- 字元緩衝輸入輸出流:一次讀寫一個字元。
BufferedReader bufferedReader = new BufferedReader(new FileReader("inputpath"));
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("outpath"));
int i = 0;
while ((i = bufferedReader.read()) != -1) {
bufferedWriter.write(i);
bufferedWriter.flush();
}
bufferedWriter.close();
bufferedReader.close();
- 字元緩衝輸入輸出流:一次讀寫一個字元數組。
BufferedReader bufferedReader = new BufferedReader(new FileReader("inputpath"));
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("outpath"));
char[] chars = new char[1024];
int length = 0;
while ((length = bufferedReader.read(chars)) != -1) {
bufferedWriter.write(chars,0,length);
bufferedWriter.flush();
}
bufferedWriter.close();
bufferedReader.close();
- 字元緩衝輸入輸出流:一次讀寫一行數據。
BufferedReader bufferedReader = new BufferedReader(new FileReader("inputpath"));
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("outpath"));
String i = null;
while ((i = bufferedReader.readLine()) != null) {
bufferedWriter.write(i);
bufferedWriter.newLine();
bufferedWriter.flush();
}
bufferedWriter.close();
bufferedReader.close();