-
5)序列化中,子類和父類構造函數的調用問題
對子類對象進行反序列化操作時,如果其父類沒有實現序列化接口,那么其父類的構造函數會被調用
一個類實現了序列化接口,那么其子類都可以進行序列化
查看全部 -
4)transient關鍵字
private void writeObject(java.io.ObjectOutputStream s)
? ? ? ?throws java.io.IOExceptionprivate void readObject(java.io.ObjectInputStream s)
? ? ? ?throws java.io.IOException, ClassNotFoundException分析ArrayList源碼中序列化和反序列化的問題
查看全部 -
字符流的過濾器
?BufferedReader? --->readLine 一次讀一行
?BufferedReader/PrintWriter? --->寫一行
查看全部 -
FileReader/FileWriter?
直接操作文件,但文本文件無法處理編碼格式,需要回歸到InputStreamReader/OutputStreamWriter方法
查看全部 -
2、字符流
1)編碼問題
2)認識文本和文本文件
Java的文本(char)是16位無符號整數,是字符Unicode編碼(雙字節編碼)
文件是byte byte byte.....的數據序列
文本文件是文本(char)序列按照某種編碼方案(utf-8,utf-16be,gbk)序列化為byte的存儲結果
3)字符流(Reader Write)--->操作的是文本文件
字符的處理,一次處理一個字符
字符的底層任然是基本的字節序列
字符流的基本實現
InputStreamReader 完成byte流解析為char流,按照編碼解析
OutputStreamWriter 提供char流到byte客流,按照編碼處理
查看全部 -
8)BufferedInputStream&BufferedOutputStream
這兩個流類位IO提供了帶緩沖區的操作,一般打開文件進行寫入或讀取操作時,都會加上緩沖,這種流模式提高了IO的性能
FileOutputStream--->write()方法相當于一滴一滴的把水轉移過去
DataOutputStream--->writeXxx()方法方便一些,相當于一瓢一瓢的把水轉移過去
BufferedOutputStream--->write()方法更方便,相當于一瓢一瓢先放入桶中,再從桶中倒入另一個缸中
查看全部 -
IO流分為輸入流、輸出流
還有字節流、字符流
1、字節流:
(1)InputStream:抽象了應用程序讀取數據的方式
(2)OutputStream:抽象了應用程序寫 出數據的方式
2)EOF = End 讀到-1就讀到結尾
3)輸入流基本方法
int b = in.read();讀取一個字節無符號填充到int低八位.-1是EOF
in.read(byte[] buf) 讀取數據填充到字節數組buf
in.read(byte[] buf,int start, int size)讀取數據到字節數組buf從buf的start位置開始存放size長度分數據
4)輸出流基本方法
out.write(int b)寫出一個byte到流,b的低8位
out.write(byte[] buf)將buf字節數組都寫到流
out.write(byte[] buf, int start,int size) 字節數組buf從start位置開始寫size長度的字節到流5)FileInputStream--->具體實現了在文件上讀取數據
6)FileOutputStream--->實現了向文件中寫出byte數據的方法
7)DataOutputStream/DataInputStream
對“流”功能得擴展,可以更加方面的讀取int,long,字符等類型數據
DataOutputStream
?writeInt()/writeDouble()/writeUT()
查看全部 -
IO流分為輸入流、輸出流
還有字節流、字符流
1、字節流:
(1)InputStream:抽象了應用程序讀取數據的方式
(2)OutputStream:抽象了應用程序寫 出數據的方式
2)EOF = End 讀到-1就讀到結尾
3)輸入流基本方法
int b = in.read();讀取一個字節無符號填充到int低八位.-1是EOF
in.read(byte[] buf) 讀取數據填充到字節數組buf
in.read(byte[] buf,int start, int size)讀取數據到字節數組buf從buf的start位置開始存放size長度分數據
4)輸出流基本方法
out.write(int b)寫出一個byte到流,b的低8位
out.write(byte[] buf)將buf字節數組都寫到流
out.write(byte[] buf, int start,int size) 字節數組buf從start位置開始寫size長度的字節到流5)FileInputStream--->具體實現了在文件上讀取數據
6)FileOutputStream--->實現了向文件中寫出byte數據的方法
查看全部 -
java.io.File類用于表示文件(目錄)
File類只用于表示文件(目錄)的信息(名稱、大小等),不能用于文件內容的訪問
RandomAccessFile java提供的對文件內容的訪問,既可以讀文件,也可以寫文件。支持隨機訪問文件,可以訪問文件的任意位置。
RandomAccessFile支持隨機訪問文件,可以訪問文件的任意位置
(1)java文件模型
?在硬盤上的文件時 byte byte byte存儲的,是數據的集合
(2)打開文件
兩種模式:“rw”(讀寫),“r”(只讀)
RandomAccessFile raf = new RandomAccessFile(File,"rw")
文件指針,打開文件時指針在開頭 pointer = 0;
(3)寫方法:
raf.write(int)--->只寫一個字節(后8位),同時指針指向下一個位置,準備再次寫入
(4)讀方法:
int b = raf.read()--->讀一個字節
(5)文件讀寫完成以后一定要關閉(Oracle官方說明)
raf.close()查看全部 -
package com.imooc.io;
import java.io.File;
import java.io.IOException;
//列出File的一些常用操作,比如過濾、遍歷等操作
public class FileUtils {
? ?/**
? ? * 列出指定目錄下(包括其子目錄的)所有文件
? ? *
? ? * @param dir
? ? * @throws IOException
? ? */
? ?public static void listDirectory(File dir) throws IOException {
? ? ? ?if (!dir.exists()) {
? ? ? ? ? ?throw new IllegalArgumentException("目錄:" + dir + "不存在.");
? ? ? ?}
? ? ? ?if (!dir.isDirectory()) {
? ? ? ? ? ?throw new IllegalArgumentException(dir + "不是目錄!");
? ? ? ?}
// ? ? ? ?String[] filenames = dir.list();//返回的是字符串數組 直接子的名稱,不包含目錄下的內容
// ? ? ? ?for (String s : filenames) {
// ? ? ? ? ? ?System.out.println(dir + "\\" + s);
// ? ? ? ?}
? ? ? ?//如果要遍歷子目錄下的內容就需要構造成File對象的遞歸操作,File提供了直接返回File對象
? ? ? ?File[] files = dir.listFiles();//返回的是直接子目錄(文件)的對象
? ? ? ?if (files != null && files.length > 0) {
? ? ? ? ? ?for (File file : files) {
? ? ? ? ? ? ? ?if (file.isDirectory()) {
? ? ? ? ? ? ? ? ? ?//遞歸
? ? ? ? ? ? ? ? ? ?listDirectory(file);
? ? ? ? ? ? ? ?} else {
? ? ? ? ? ? ? ? ? ?System.out.println(file);
? ? ? ? ? ? ? ?}
? ? ? ? ? ?}
? ? ? ?}
? ?}
}查看全部 -
IO流分為輸入流、輸出流
還有字節流、字符流
1、字節流:
(1)InputStream:抽象了應用程序讀取數據的方式
(2)OutputStream:抽象了應用程序寫 出數據的方式
2)EOF = End 讀到-1就讀到結尾
3)輸入流基本方法
int b = in.read();讀取一個字節無符號填充到int低八位.-1是EOF
in.read(byte[] buf) 讀取數據填充到字節數組buf
in.read(byte[] buf,int start, int size)讀取數據到字節數組buf從buf的start位置開始存放size長度分數據
4)輸出流基本方法
out.write(int b)寫出一個byte到流,b的低8位
out.write(byte[] buf)將buf字節數組都寫到流
out.write(byte[] buf, int start,int size) 字節數組buf從start位置開始寫size長度的字節到流查看全部 -
andomAccessFile java提供的對文件內容的訪問,既可以讀文件,也可以寫文件。支持隨機訪問文件,可以訪問文件的任意位置。
java文件模型
?在硬盤上的文件時 byte byte byte存儲的,是數據的集合
打開文件
兩種模式:“rw”(讀寫),“r”(只讀)
RandomAccessFile raf = new RandomAccessFile(File,"rw")
文件指針,打開文件時指針在開頭 pointer = 0;
寫方法:
raf.write(int)--->只寫一個字節(后8位),同時指針指向下一個位置,準備再次寫入
讀方法:
int b = raf.read()--->讀一個字節
文件讀寫完成以后一定要關閉
raf.close()查看全部 -
import java.io.File;
import java.io.IOException;
// 列出file類的一些常用操作,不如過濾、遍歷等操作
public class FileUtils {
public static void listDirectory(File dir) throws IOException{
// exists()方法用于判斷文件或目錄是否存在
if(!dir.exists()){
throw new IllegalArgumentException("目錄:" + dir + "不存在");
}
// isDirectory()方法用于判斷File類的對象是否是目錄
if(!dir.isDirectory()){
throw new IllegalArgumentException(dir + "不是目錄");
}
// list方法用于列出當前目錄下的子目錄和文件
/*String[] filenames = dir.list(); // 返回的是字符串數組 直接子的名稱 不包含子目錄下的內容
for (String string : filenames) {
System.out.println(dir + ":\\" + string);
}*/
// 如果要遍歷子目錄下的內容就需要構造成File對象做遞歸操作,File提供了返回File對象的API
File[] files = dir.listFiles(); // 返回的是直接子目錄(文件)的抽象
//for (File file : files) {
//System.out.println(file);
if(files!=null && files.length > 0){
for (File file : files) {
if(file.isDirectory()){
// 遞歸
listDirectory(file);
}else{
System.out.println(file);
}
}
}
}
}查看全部 -
java.io.File類在Java中表示文件或目錄。
File類只用于表示文件(目錄)的信息(名稱、大小等),不能用于文件內容的訪問。
創建File對象:File file=new File(String path);
可以通過 alt+/ 查看構造函數
注意:盤符后跟雙斜杠 \\ 或者 /
1. file.seperater();獲取系統分隔符
2. file.exists();是否存在.存在返回true,不存在返回false
3. file.mkdir();或者file.mkdirs();創建目錄或多級目錄。
4. file.isDirectory()或者file.isFile()判斷是否是目錄或者是否是文件。是返回true,不是為false
5. file.delete();刪除文件/文件夾。
6. file.createNewFile();創建新文件。
7. file.getName()獲取文件名稱。
8. file.getAbsolutePath()獲取絕對路徑。
9. file.getParent();獲取父級絕對路徑。查看全部 -
這里說"不識別換行符" 我認為readLine就是通過換行符進行斷行 讀取斷行前的內容并賦值.
查看全部 -
注意這里的?
String line;
和 !=null
查看全部 -
new InputStreamReader 中可以傳遞字符類型的參數.
查看全部 -
new BufferedReader 的參數是 Reader 類型 而這個Reader類型是 抽象類 無法直接new?可以通過 new InputStreamReader 來生成一個子類的對象
查看全部 -
把很大的數組直接構造為字符串.
查看全部 -
這里他在每次寫入后都刷新緩沖區一次.
查看全部
舉報