您的位置:首页 > 编程语言 > Java开发

Java基础知识之IO(2)

2015-05-31 09:59 387 查看

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

[code]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.

[code]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类的实例可以根据传入不同的实例化对象完成不同的功能,具体看例子。

[code]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()方法,是直接对文件进行操作,效率低下。

[code]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();
    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: