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 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);

SetkeySet=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);

   }

}

你可能感兴趣的:(IO流)