Java基础知识之IO(2)

来源:互联网 发布:caliber软件 编辑:程序博客网 时间:2024/04/30 00:34

文件复制小案例(温习Java基础知识之IO(1)中的知识)

package copy;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;public class CopyDemo {    public static void main(String[] args) throws IOException {        String from = "E:"+File.separator+"psu.jpg";//要复制的文件        String to = "C:" + File.separator;// 要存储的文件        File file_from = new File(from);// 实例化文件        // 若源文件不存在,则需要退出        if (!file_from.exists()) {            System.out.println("源文件不存在!");            return;        }        File file_to = new File(to);//实例化文件        //若目标位置不存在,退出        if(!file_to.exists()){            System.out.println("目标位置不存在!");        }        file_to = new File(to+"copy.jpg");//新建文件        //实例化输入,输出流(相对于程序而言,数据的流向)        InputStream in = new  FileInputStream(file_from);        OutputStream out = new FileOutputStream(file_to);        int temp;        //边度边写        while((temp = in.read())!=-1){            out.write(temp);        }        //关闭流        in.close();        out.close();    }}

内存操作流(ByteArrayInputStream、ByteArrayOutputStream)

注意:这两个内所操作的数据位置是相对于内存而言,从程序向内存写入数据使用ByteArrayInputStream,反之使用ByteArrayOutputStream.

import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;/* * 将字符串读入到内存,将其转换为大写后,输出 */public class ByteArrayDemo {    public static void main(String[] args) {        String str = "hello world";//需要操作的字符串        //实例化流对象        ByteArrayOutputStream out = new ByteArrayOutputStream();        ByteArrayInputStream in = new ByteArrayInputStream(str.getBytes());        int temp;        while((temp=in.read())!=-1){            char c=(char)temp;            out.write(Character.toUpperCase(c));        }        //循环结束后,字符串的内容存储在内存中。        System.out.println(out.toString());    }}

重点注意数据的存在位置。

打印流(PrintStream、PrintWriter)

1、PrintStream
先观察期构造方法:public PrintStream(OutputStream out)
实例化该类时,需要传入字节输出流对象,我们知道OutputStream是一个抽象类,依赖于其子类进行实例化,由此可以推测出,PrintStream类的实例可以根据传入不同的实例化对象完成不同的功能,具体看例子。

package PrintStrem;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;import java.io.PrintStream;public class PrintStremDemo {    private static PrintStream outPrint;    public static void main(String[] args) throws IOException, IOException {        File file = new File( "E:"+File.separator+"javaio"+File.separator+"FileOutputStream.txt");        OutputStream out = new FileOutputStream(file,true);        outPrint = new PrintStream(out);        //不换行输出        outPrint.print(false);        outPrint.print('c');        //换行输出        outPrint.println(true);        outPrint.println(123.3132);        //格式化输出        String name = "高洋";int age = 20;        outPrint.printf("姓名:%s;年龄:%d", name,age);    }}

从例子中可以看出,这种输出方法很方便,可以输出任意类型数据。

BufferedReader

从缓冲区读入数据,包装输入流,从而提高了读入的效率,因为直接使用输入流的read()方法,是直接对文件进行操作,效率低下。

import java.io.BufferedReader;import java.io.File;import java.io.FileReader;import java.io.IOException;public class BufferedReaderDemo {    public static void main(String[] args) throws IOException {        File file = new File("E:"+File.separator+"javaio"+File.separator+"FileOutputStream.txt");//创建文件对象        //BufferedReader构造接收Reader类对象进行实例化,所以Reader类的子类的对象都可以为其实例化        BufferedReader read = new BufferedReader(new FileReader(file));        int temp = 0;        while((temp = read.read())!=-1){            char c = (char)temp;            System.out.print(c);        }        read.close();    }}
0 0
原创粉丝点击