創(chuàng)建文件
完整的路徑 文件的copy path
String path="";
File file=new File(path.concat("/1.txt"));
判斷文件是否存在
if (file.exists()==false)
{
file.createNewFile();
}
拋出異常
第一種
在main后面加 throws IOException
public static void main(String[]args) throws IOException, ClassNotFoundException
第二種
try {
file.createNewFile();
}
catch (IOException e)
{
System.out.println("IO異常");
}
I/O 流的說明
流的方向:參考的是自己的內(nèi)存空間
輸出流:從內(nèi)存空間將數(shù)據(jù)寫道外部設(shè)備(磁盤/硬盤/光盤)
輸入流:將外部設(shè)備寫入內(nèi)存
流:統(tǒng)一管理數(shù)據(jù)的寫入和讀取
輸出流:開發(fā)者只需要將內(nèi)存里面的數(shù)據(jù)寫道流(stream)里面
輸入流:或者從流里面讀取數(shù)據(jù)
輸出流:OutputStream字節(jié)流 Writer 字符流
輸入流:InputStream字節(jié)流 Read 字符流
I/O流對象 不屬于內(nèi)存對象 就需要自己關(guān)閉
OutputStream和InputStream都是抽象類 不能直接使用
和FileInputStream(對文件操作)字節(jié)流(寫入或讀取字節(jié)數(shù)組)
ObjectOutputStream和ObjectInputStream(對對象操作)
FileWriter和FileRead 字符流(寫入或讀取字符數(shù)組)
向文件寫入數(shù)據(jù)
第一種 寫入字節(jié)數(shù)組
1.創(chuàng)建文件輸出流(字節(jié)數(shù)組)對象
FileOutputStream fos=new FileOutputStream(file);
2.調(diào)用write 方法寫入
byte[]text ={'1','2','3'};
fos.write(text);
3.操作完畢需要關(guān)閉stream對象
fos.close();
第二種 寫入字符數(shù)組
向文件寫入數(shù)據(jù)字符(字符數(shù)組)流
FileWriter fw=new FileWriter(file);
char [] name={'張','欣','欣'};
fw.write(name);
fw.close();
讀取內(nèi)容
第一種讀取字節(jié)
FileInputStream fis=new FileInputStream(file);
byte[] name=new byte[9];
fis.read(name);
fis.close();
System.out.println(new String(name));
第二種讀取字符
FileReader fr=new FileReader(file);
char [] book=new char[4];
fr.read(book);
fr.close();
System.out.println(new String(book));
向文件里面存一個對象
- 序列化 Serializable
- 保存的對象必須實現(xiàn) Serializable接口
- 如果這個對象內(nèi)部還有屬性變量是其他類的對象
- 這個類也必須實現(xiàn) Serializable接口
Person xw = new Person();
xw.age=20;
xw.name="小王";
OutputStream ops=new FileOutputStream(file);
ObjectOutputStream oops=new ObjectOutputStream(ops);
oops.writeObject(xw);
oops.close();
從文件里面讀取一個對象
InputStream is= new FileInputStream(file);
ObjectInputStream ois=new ObjectInputStream(is);
Person xw=(Person) ois.readObject();
System.out.println(xw.name+""+xw.age);
ois.close();
將一個文件 copy 到另一個位置
第一種 單字節(jié)輸出
//1.源文件的路徑
String p="C:\\Users\\ASUS\\Desktop\\1.abc.png";
//2.目標文件的路徑
String c="C:\\Users\\ASUS\\AndroidStudioProjects\\day4\\java\\src\\main\\java\\swu\\zxxday8\\java\\PassWord\\1.abc.png";
//3.圖片 字節(jié)
FileInputStream fis= new FileInputStream(p);
FileOutputStream fos= new FileOutputStream(c);
byte [] in=new byte[1024];
//第二種
int count=0;
while((count=fis.read(in))!=-1)
{
fos.write(in,0,count);
}
//第一種
while (true)
{
int count =fis.read(in);
if (count!=-1)
{
//將這次讀取的內(nèi)容寫入文件
fos.write(in,0,count);
}else {
break;
}
}
fis.close();
fos.close();
*/
/*
第二種 多字節(jié)輸出
long start = System.currentTimeMillis();
String p="C:\\Users\\ASUS\\Desktop\\1.abc.png";
Stringc="C:\\Users\\ASUS\\AndroidStudioProjects
\\day4\\java\\src\\main\\java\\swu\\zxxday8\\java\\PassWord\\1.abc.png";
//輸出流
InputStream is=new FileInputStream(p);
BufferedInputStream bis=new BufferedInputStream(is);
//輸出流
OutputStream os=new FileOutputStream(c);
BufferedOutputStream bos=new BufferedOutputStream(os);
byte [] in=new byte[1024];
int count =0;
while( (count=bis.read(in))!=-1)
{
bos.write(in,0,count);
}
bis.close();
bos.close();
long end = System.currentTimeMillis();
System.out.println(end-start);
感悟:這幾天的內(nèi)容不是很難绰疤,就是要記得東西多了厅须,一個操作要分好幾個步驟迟郎,一個步驟有好幾種用法所宰,不同的情況使用不同的代碼。還好每天基本只學一個操作惩淳,還是很輕松的疹吃。