Java基础知识之IO(2)

文件复制小案例(温习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();
    }
}
时间: 2024-10-12 10:41:09

Java基础知识之IO(2)的相关文章

JAVA基础知识之IO——Java IO体系及常用类

Java IO体系 个人觉得可以用"字节流操作类和字符流操作类组成了Java IO体系"来高度概括Java IO体系. 借用几张网络图片来说明(图片来自 http://blog.csdn.net/zhangerqing/article/details/8466532 )  基于字节的IO操作 基于字符的IO操作   从上图可以看到,整个Java IO体系都是基于字符流(InputStream/OutputStream) 和 字节流(Reader/Writer)作为基类,根据不同的数据载

Java基础知识之IO(1)

IO中主要的类和接口 File.InputStream.OutputStream.Reader.Writer.Serialzable接口 File类 File类应用的小例子 import java.io.File; import java.io.IOException; public class FileDemo { public static void main(String[] args) { //指定文件路径和名称 String path = "D:"+File.separato

第1天:了解Java基础知识

Java的优势 1. 简单 不像C或者C++语言,Java中省去了对指针的操作.但是,Java中并没有省去指针,代替指针的是一种新的变量--引用,引用也是保存一个对象的内存地址. 2.方便 Java虚拟机自带垃圾回收器,能够自动回收内存资源.而C和C++语言,需要开发人员手动进行内存资源回收. 3.安全 不支持指针操作 4.平台无关性 Java语言是跨平台的,一次编译,到处运行. 而且,不同平台,C语言中数据类型所占的位数是不同的,而Java语言中,数据类型所占的位数是固定的. 5.面向对象 J

java基础知识回顾之javaIO类--管道流PipedOutputStream和PipedIutputStream

管道流(线程通信流):管道流的主要作用是可以进行两个线程间的通讯,分为管道输出流(PipedOutputStream).管道输入流(PipedInputStream),如果想要进行管道输出,则必须要把输出流连在输入流之上.如图所示: 1.管道输入流应该连接到管道输出流 ,输入流和输出流可以直接连接       2.使用多线程操作,结合线程进行操作.通常由某个线程从管道输入流中(PipedInputStream)对象读取.          并由其他线程将其写入到相应的端到输出流中.不能使用单线程

java基础知识(二)

1.关于static关键字总结: 1.不能在static修饰的方法中引用this变量,只能引用一些静态变量或方法,或new新的对象(可以定义局部变量). 简言之,静态方法或块中,只能引用静态的方法或变量. 2.类中的成员变量(static修饰)有缺省值,而类的定义的方法中的局部变量没有缺省值. 3.在类的构造器中,可以引用任何的静态或非静态的变量和方法,可以在非static方法中调用static方法. 4.static{}块中的代码在类装载中仅执行一次. 5.在7-7,A staticmetho

java基础知识回顾之javaIO类--RandomAccessFile类

java.io 类 RandomAccessFile java.lang.Object java.io.RandomAccessFile1.该类不是IO流中的子类.2.该类既能读又能写.3.该对象内部分装了一个字节数组,通过指针可以操作数组中的元素.4.其实该对象就是将字节输入流和输出流进行了封装.5.该对象只能对文件操作,目的和源只能是文件对象.通过看构造方法可以看得出来.RandomAccessFile(File file, String mode) RandomAccessFile(Str

java基础知识回顾之javaIO类--File类应用:获取指定目录下面的指定扩展名的文件,将文件的绝对路径写入到目的文件当中

/** * File文件综合应用 * 需求:获取指定目录下面,指定扩展名的文件,将文件的绝对路径写到文本文件当中. *  * 思路:1.需要深度遍历.--递归 * 2.遍历的过程中过滤指定扩展名的文件--过滤器FileNameFilter,将文件存入容器中 * 3.将容器中的内容遍历,写入到指定文件中 * */ 代码:  FilenameFilter 过滤器: package com.lp.ecjtu.File.filter; import java.io.File; import java.i

Java基础知识的三十个经典问答

Java基础知识的三十个经典问答 1.面向对象的特点 抽象: 抽象是或略一个主题中与当前目标的无关的因素,一边充分考虑有关的内容.抽象并不能解决目标中所有的问题,只能选择其中的一部分,忽略其他的部分.抽象包含两个方面:一是过程抽象:一是数据抽象. 继承 继承是一种联接类的层次模型,允许和鼓励类的重用,提供了一种明确的共性的方法.对象的一个新类可以从现有的类中派生,这叫做类的继承.心累继承了原始类 的特性,新类称为原始类的派生类或者是子类,原始类称为新类的基类或者父类.子类可以从父类那里继承父类的

Java基础知识(二)

1,字符串 new String("abc")创建了几个对象? 一个或两个,如果常量池中原来有"abc",则只创建一个对象:如果常量池中原来没有字符串"abc",那么就会创建两个对象. String s="abc"; String s1="ab"+"c"; System.out.println(s==s1); 输出 true ,因为"ab"+"c"