-
5)序列化中,子類(lèi)和父類(lèi)構(gòu)造函數(shù)的調(diào)用問(wèn)題
對(duì)子類(lèi)對(duì)象進(jìn)行反序列化操作時(shí),如果其父類(lèi)沒(méi)有實(shí)現(xiàn)序列化接口,那么其父類(lèi)的構(gòu)造函數(shù)會(huì)被調(diào)用
一個(gè)類(lèi)實(shí)現(xiàn)了序列化接口,那么其子類(lèi)都可以進(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源碼中序列化和反序列化的問(wèn)題
查看全部 -
字符流的過(guò)濾器
?BufferedReader? --->readLine 一次讀一行
?BufferedReader/PrintWriter? --->寫(xiě)一行
查看全部 -
FileReader/FileWriter?
直接操作文件,但文本文件無(wú)法處理編碼格式,需要回歸到InputStreamReader/OutputStreamWriter方法
查看全部 -
2、字符流
1)編碼問(wèn)題
2)認(rèn)識(shí)文本和文本文件
Java的文本(char)是16位無(wú)符號(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è)流類(lèi)位IO提供了帶緩沖區(qū)的操作,一般打開(kāi)文件進(jìn)行寫(xiě)入或讀取操作時(shí),都會(huì)加上緩沖,這種流模式提高了IO的性能
FileOutputStream--->write()方法相當(dāng)于一滴一滴的把水轉(zhuǎn)移過(guò)去
DataOutputStream--->writeXxx()方法方便一些,相當(dāng)于一瓢一瓢的把水轉(zhuǎn)移過(guò)去
BufferedOutputStream--->write()方法更方便,相當(dāng)于一瓢一瓢先放入桶中,再?gòu)耐爸械谷肓硪粋€(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é)無(wú)符號(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位置開(kāi)始存放size長(zhǎng)度分?jǐn)?shù)據(jù)
4)輸出流基本方法
out.write(int b)寫(xiě)出一個(gè)byte到流,b的低8位
out.write(byte[] buf)將buf字節(jié)數(shù)組都寫(xiě)到流
out.write(byte[] buf, int start,int size) 字節(jié)數(shù)組buf從start位置開(kāi)始寫(xiě)size長(zhǎng)度的字節(jié)到流5)FileInputStream--->具體實(shí)現(xiàn)了在文件上讀取數(shù)據(jù)
6)FileOutputStream--->實(shí)現(xiàn)了向文件中寫(xiě)出byte數(shù)據(jù)的方法
7)DataOutputStream/DataInputStream
對(duì)“流”功能得擴(kuò)展,可以更加方面的讀取int,long,字符等類(lèi)型數(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é)無(wú)符號(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位置開(kāi)始存放size長(zhǎng)度分?jǐn)?shù)據(jù)
4)輸出流基本方法
out.write(int b)寫(xiě)出一個(gè)byte到流,b的低8位
out.write(byte[] buf)將buf字節(jié)數(shù)組都寫(xiě)到流
out.write(byte[] buf, int start,int size) 字節(jié)數(shù)組buf從start位置開(kāi)始寫(xiě)size長(zhǎng)度的字節(jié)到流5)FileInputStream--->具體實(shí)現(xiàn)了在文件上讀取數(shù)據(jù)
6)FileOutputStream--->實(shí)現(xiàn)了向文件中寫(xiě)出byte數(shù)據(jù)的方法
查看全部 -
java.io.File類(lèi)用于表示文件(目錄)
File類(lèi)只用于表示文件(目錄)的信息(名稱(chēng)、大小等),不能用于文件內(nèi)容的訪(fǎng)問(wèn)
RandomAccessFile java提供的對(duì)文件內(nèi)容的訪(fǎng)問(wèn),既可以讀文件,也可以寫(xiě)文件。支持隨機(jī)訪(fǎng)問(wèn)文件,可以訪(fǎng)問(wèn)文件的任意位置。
RandomAccessFile支持隨機(jī)訪(fǎng)問(wèn)文件,可以訪(fǎng)問(wèn)文件的任意位置
(1)java文件模型
?在硬盤(pán)上的文件時(shí) byte byte byte存儲(chǔ)的,是數(shù)據(jù)的集合
(2)打開(kāi)文件
兩種模式:“rw”(讀寫(xiě)),“r”(只讀)
RandomAccessFile raf = new RandomAccessFile(File,"rw")
文件指針,打開(kāi)文件時(shí)指針在開(kāi)頭 pointer = 0;
(3)寫(xiě)方法:
raf.write(int)--->只寫(xiě)一個(gè)字節(jié)(后8位),同時(shí)指針指向下一個(gè)位置,準(zhǔn)備再次寫(xiě)入
(4)讀方法:
int b = raf.read()--->讀一個(gè)字節(jié)
(5)文件讀寫(xiě)完成以后一定要關(guān)閉(Oracle官方說(shuō)明)
raf.close()查看全部 -
package com.imooc.io;
import java.io.File;
import java.io.IOException;
//列出File的一些常用操作,比如過(guò)濾、遍歷等操作
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ù)組 直接子的名稱(chēng),不包含目錄下的內(nèi)容
// ? ? ? ?for (String s : filenames) {
// ? ? ? ? ? ?System.out.println(dir + "\\" + s);
// ? ? ? ?}
? ? ? ?//如果要遍歷子目錄下的內(nèi)容就需要構(gòu)造成File對(duì)象的遞歸操作,F(xiàn)ile提供了直接返回File對(duì)象
? ? ? ?File[] files = dir.listFiles();//返回的是直接子目錄(文件)的對(duì)象
? ? ? ?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é)無(wú)符號(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位置開(kāi)始存放size長(zhǎng)度分?jǐn)?shù)據(jù)
4)輸出流基本方法
out.write(int b)寫(xiě)出一個(gè)byte到流,b的低8位
out.write(byte[] buf)將buf字節(jié)數(shù)組都寫(xiě)到流
out.write(byte[] buf, int start,int size) 字節(jié)數(shù)組buf從start位置開(kāi)始寫(xiě)size長(zhǎng)度的字節(jié)到流查看全部 -
andomAccessFile java提供的對(duì)文件內(nèi)容的訪(fǎng)問(wèn),既可以讀文件,也可以寫(xiě)文件。支持隨機(jī)訪(fǎng)問(wèn)文件,可以訪(fǎng)問(wèn)文件的任意位置。
java文件模型
?在硬盤(pán)上的文件時(shí) byte byte byte存儲(chǔ)的,是數(shù)據(jù)的集合
打開(kāi)文件
兩種模式:“rw”(讀寫(xiě)),“r”(只讀)
RandomAccessFile raf = new RandomAccessFile(File,"rw")
文件指針,打開(kāi)文件時(shí)指針在開(kāi)頭 pointer = 0;
寫(xiě)方法:
raf.write(int)--->只寫(xiě)一個(gè)字節(jié)(后8位),同時(shí)指針指向下一個(gè)位置,準(zhǔn)備再次寫(xiě)入
讀方法:
int b = raf.read()--->讀一個(gè)字節(jié)
文件讀寫(xiě)完成以后一定要關(guān)閉
raf.close()查看全部 -
import java.io.File;
import java.io.IOException;
// 列出file類(lèi)的一些常用操作,不如過(guò)濾、遍歷等操作
public class FileUtils {
public static void listDirectory(File dir) throws IOException{
// exists()方法用于判斷文件或目錄是否存在
if(!dir.exists()){
throw new IllegalArgumentException("目錄:" + dir + "不存在");
}
// isDirectory()方法用于判斷File類(lèi)的對(duì)象是否是目錄
if(!dir.isDirectory()){
throw new IllegalArgumentException(dir + "不是目錄");
}
// list方法用于列出當(dāng)前目錄下的子目錄和文件
/*String[] filenames = dir.list(); // 返回的是字符串?dāng)?shù)組 直接子的名稱(chēng) 不包含子目錄下的內(nèi)容
for (String string : filenames) {
System.out.println(dir + ":\\" + string);
}*/
// 如果要遍歷子目錄下的內(nèi)容就需要構(gòu)造成File對(duì)象做遞歸操作,F(xiàn)ile提供了返回File對(duì)象的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類(lèi)在Java中表示文件或目錄。
File類(lèi)只用于表示文件(目錄)的信息(名稱(chēng)、大小等),不能用于文件內(nèi)容的訪(fǎng)問(wèn)。
創(chuàng)建File對(duì)象:File file=new File(String path);
可以通過(guò) alt+/ 查看構(gòu)造函數(shù)
注意:盤(pán)符后跟雙斜杠 \\ 或者 /
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()獲取文件名稱(chēng)。
8. file.getAbsolutePath()獲取絕對(duì)路徑。
9. file.getParent();獲取父級(jí)絕對(duì)路徑。查看全部 -
這里說(shuō)"不識(shí)別換行符" 我認(rèn)為readLine就是通過(guò)換行符進(jìn)行斷行 讀取斷行前的內(nèi)容并賦值.
查看全部 -
注意這里的?
String line;
和 !=null
查看全部 -
new InputStreamReader 中可以傳遞字符類(lèi)型的參數(shù).
查看全部 -
new BufferedReader 的參數(shù)是 Reader 類(lèi)型 而這個(gè)Reader類(lèi)型是 抽象類(lèi) 無(wú)法直接new?可以通過(guò) new InputStreamReader 來(lái)生成一個(gè)子類(lèi)的對(duì)象
查看全部 -
把很大的數(shù)組直接構(gòu)造為字符串.
查看全部 -
這里他在每次寫(xiě)入后都刷新緩沖區(qū)一次.
查看全部
舉報(bào)