IO流

01 复习

文件夹删除

public class Demo01

{

public static void main(String[] args) {

deleteFile(new File("D:/abc"));

}

public static void deleteFile(File file){

if (file.isFile()){

file.delete();//删除文件

        }

if (file.isDirectory()){

File[] files = file.listFiles();

for (File f : files) {

deleteFile(f);

}

file.delete();//删除文件夹

        }

}

}

02 IO流常见流父类复习

顶级父类们


03输出流的使用步骤

输出流:顶层父类是OutputStream【抽象类】,借助其子类FileOutputStream学习

输出流的使用步骤:

1.创【创建流对象】

FileOutputStream(File file):创建文件输出流以写入由指定的File对象表示的文件。

public FileoutputStream(String name):创建文件输出流以指定的名称写入文件。

【如果原来文件存在数据,会清空,如果没有文件会创建一个】

2 写【调用写数据的方法】

write方法:

public void write(int b):写出一个字节

public void write(byte[] bytes):写出一个字节数组

public void write(byte[] bytes,int off,int len)

3:关【强调关流的方法】

public void close()

public class Demo2

{

public static void main(String[] args)throws IOException {

FileOutputStream fos=new FileOutputStream(new File("file01.txt"));

fos.write(98);

byte[] bytes ="abc我爱java".getBytes();

fos.write(bytes);

fos.write(bytes,0,2);

fos.close();

}

}



04 写出换行及文件数据追加功能

如果要完成文件数据追加续写

创建流时需要使用一下两个构造方法:

public FileOutputStream(File file,boolean append):创建文件输出流以写入由指定的File对象表示的文件。

public FileOutputStream(File file,boolean append):创建文件输出流以写入由指定的File对象表示的文件。

public FileOutputStream(String name,boolean append):创建文件输出流以指定的名称写入文件。

如果要完成文件数据的追加,append参数要设置为true

写出换行

\r\n

\r

\n

String ls=System.lineSeparator

06字节输入流的使用

输入流顶层父类是:InputStream【抽象类】可以使用FileInputStream

使用步骤:

1)创【创建输入流对象】

FileInputStream的构造方法

public FileInputStream(File file):关联要读取的文件

public FileInputStream(String filePath):关联要读取的文件路径

要求指定的文件,一定要存在,否则会报错

【FileNotFoundException】

2)读【读取数据】

read:

public int read():读取一个字节并返回,如果读取到末位,会返回-1

public int read(byte[] bytes):读取多个数据到字节数组,返回读取有效的字节个数,如果没有读到数据返回-1

3)关【关闭资源】

public void close()

07 文件的复制

低效复制:int read()void write()

/*

把dir1中文件beauty.jpg复制到dir2中去

思路:先把dir1中的beauty.jpg读取到内存,然后写入到dir2中的beauty.jpg

步骤:

1)创:【创建输入输出流】

2)读,写【边读边写】

3)关【关输入和输出流的资源】

public class Demo01{

publicstaticvoidmain(String[]args)throwsIOException{

longt1=System.currentTimeMillis();

//1)创:【创建输入输出流】

FileInputStreamfis=newFileInputStream("dir1/beauty.jpg");

FileOutputStreamfos=newFileOutputStream("dir2/beauty.jpg");

//2)读,写【边读边写】

intb;

while((b=fis.read())!=-1) {

fos.write(b);

       }

//3)关【关输入和输出流的资源】  先开后关

fos.close();

fis.close();

longtimeCost=System.currentTimeMillis()-t1;

System.out.println("timeCost = "+timeCost);

   }

}


高效的复制(int read(byte[] bytes) void write(byte[] bytes,int off,int len))

/*

    把dir1中文件beauty.jpg复制到dir2中去

    思路:先把dir1中的beauty.jpg读取到内存,然后写入到dir2中的beauty.jpg

步骤:

1)创:【创建输入输出流】

2)读,写【边读边写】

3)关【关输入和输出流的资源】

*/

public class Demo02 {

    public static void main(String[] args) throws IOException {

        long t1 = System.currentTimeMillis();

        //1)创:【创建输入输出流】

        FileInputStream fis = new FileInputStream("dir1/beauty.jpg");

        FileOutputStream fos = new FileOutputStream("dir2/beauty5.jpg");

        //2)读,写【边读边写】

        int len;

        byte[] bytes = new byte[1024*8];

        while ((len = fis.read(bytes)) != -1) {

            fos.write(bytes,0,len); //写出有效数据

        }

        //3)关【关输入和输出流的资源】  先开后关

        fos.close();

        fis.close();

        long timeCost = System.currentTimeMillis() - t1;

        System.out.println("timeCost = " + timeCost);

    }

}

08字符输入流的使用

字符的输入流:Reader【抽象类】,得其子类 FileReader

使用步骤:

1)创

    FileReader的构造方法

    - FileReader(File file): 创建一个新的 FileReader ,给定要读取的File对象。

    - FileReader(String fileName): 创建一个新的 FileReader ,给定要读取的文件的名称。

    如果文件不存在,会报错FileNotFoundException

2)读

    read:

    public int read():读取一个字符,如果读取到末位,返回-1

    public int read(char[] chars) :读取有效的字符到字符数组,返回读取字符的有效个数,如果没有字符返回-1

3)关

    public void close()

*/

public class Demo01{

public static void main(String[]args)throwsIOException{

//1:创

FileReaderfr=newFileReader("file05.txt");

//2:读

/* // public int read():读取一个字符,如果读取到末位,返回-1

int c;//保存读取的字符

while ((c = fr.read()) != -1) {

System.out.println((char)c);

}*/

// public int read(char[] chars) :读取有效的字符到字符数组,返回读取字符的有效个数,如果没有字符返回-1

intlen;

char[]chars=newchar[2];

while((len=fr.read(chars))!=-1) {

System.out.println(newString(chars,0,len));

       }


//3:关

fr.close();

   }

}

10字符的输出流使用

/*

字符输出流:Writer【抽象类】,得用其子类FileWriter

使用步骤:

1)创

FileWriter的构造方法

public FileWriter(File file): 关联一个文件用来保存写出的数据

public FileWriter(String filePath): 关联一个文件用来保存写出的数据

//如果append设置为true,具有数据追加拼接的功能

public FileWriter(File file ,boolean append): 关联一个文件用来保存写出的数据

public FileWriter(String filePath, boolean append): 关联一个文件用来保存写出的数据

2)写

write:

public void write(int c):写出一个字符

public void write(char[] chars):写出一个字符数组

public void write(char[] chars,int off,int len):写出一个字符数组中指定字符

public void write(String str):直接写出字符串

3)关

public void close()

*/

publicclassDemo01{

publicstaticvoidmain(String[]args)throwsIOException{

//1:创

FileWriterfw=newFileWriter("file06.txt");

//2:写

fw.write('A');//写出一个字符

char[]chars={'a','b','c'};

fw.write(chars);//写出一个字符数组

fw.write(chars,0,2);//写出字符数组中指定的字符

fw.write("HelloWorld");//写出字符串

fw.write("我爱Java",0,2);//写出字符串中指定的字符

//3:关

fw.close();

   }

}

11 Properties属性类的使用

/*

Properties属性类,最终会实现Map,本质上就是Map特点就是保存键值对信息

用来存储:属性配置信息【键值对】

downloadPath=D:/download

1)创建对象

2)使用方法

- public Object setProperty(String key, String value) : 保存一对属性。   put

- public String getProperty(String key) :使用此属性列表中指定的键搜索属性值。 get

- public Set<String> stringPropertyNames() :所有键的名称的集合。 keySet

从流中读取

- public void load(InputStream in): 从字节输入流中读取属性文件。

- public void load(Reader reader): 从字符流中读取属性文件

存入到流中

- public void store(OutputStream out,String comment): comment是注释

- public void store(Writer writer, String comment):

*/

publicclassDemo01{

publicstaticvoidmain(String[]args)throwsIOException{

Propertiespro=newProperties();

pro.setProperty("downloadPath1","D:/download");

pro.setProperty("downloadPath2","D:/music");

pro.setProperty("downloadPath3","D:/movie");

System.out.println("pro = "+pro);

StringaaaValue=pro.getProperty("aaa","没有配置信息");

System.out.println("aaaValue = "+aaaValue);

StringdownloadPath=pro.getProperty("downloadPath");

System.out.println("downloadPath = "+downloadPath);

Set<String>keySet=pro.stringPropertyNames();

System.out.println("keySet = "+keySet);

// 存入到流中:存储到指定的路径

//- public void store(OutputStream out,String comment): comment是注释

//- public void store(Writer writer, String comment):

pro.store(newFileWriter("downloadInfo.properties"),"this is comment");


   }

}

/*

从流中读取

- public void load(InputStream in): 从字节输入流中读取属性文件。

- public void load(Reader reader): 从字符流中读取属性文件

*/

publicclassDemo02{

publicstaticvoidmain(String[]args)throwsIOException{

Propertiespro=newProperties();

System.out.println("pro = "+pro);

pro.load(newFileReader("downloadInfo.properties"));

System.out.println("pro = "+pro);

   }

}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容