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