Fork me on GitHub

Java从零开始学三十五(JAVA IO- 字节流)

一、字节流

FileOutputStream是OutputStream 的直接子类
FileInputStream也是InputStream的直接子类

二、文本文件的读写

2.1、字节输入流

 

Test.txt文件内容
abcdefg
package com.pb.io;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

/*
 * FileInputStreamDemo读取文件
 */
public class FileInputStreamDemo1 {

    public static void main(String[] args) {
        //1.声明文件对象,也可以跳过此步直接在第2步中写
        File f=new File("d:"+File.separator+"test"+File.separator+"test.txt"); 
        //FileInputStream fis=new FileInputStream("d:/test/hello.txt");
        try {
            //2.创建FileInputStream对象并将file对象传入
            FileInputStream fis=new FileInputStream(f);
            //3.定义整型变量用来存放内容
            int date;
            //4先查看文件可以读取的字节类available()方法获取文件的字节数
            System.out.println("可读取的字节数:"+fis.available());
            System.out.println("=========开始读取文件==========");
            //5读取文件read()方法
            System.out.println("========没有转换前输出=======");
            while((date=fis.read())!=-1){   //!=-1说明文件还有内容=-1时,就说明文件内容读完结束
                
                System.out.println(date+"\t");

            }
            System.out.println("=======文件读取结束=========");
            //关闭流
            fis.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        

    }

}

结果:

可读取的字节数:7
=========开始读取文件==========
========没有转换前输出=======
97    
98    
99    
100    
101    
102    
103    
=======文件读取结束=========

结果:并不是文件中的内容

修改上面的文件:

package com.pb.io;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

/*
 * FileInputStreamDemo读取文件
 */
public class FileInputStreamDemo1 {

    public static void main(String[] args) {
        //1.声明文件对象,也可以跳过此步直接在第2步中写
        File f=new File("d:"+File.separator+"test"+File.separator+"test.txt"); 
        //FileInputStream fis=new FileInputStream("d:/test/hello.txt");
        try {
            //2.创建FileInputStream对象并将file对象传入
            FileInputStream fis=new FileInputStream(f);
            //3.定义整型变量用来存放内容
            int date;
            //4先查看文件可以读取的字节类available()方法获取文件的字节数
            System.out.println("可读取的字节数:"+fis.available());
            System.out.println("=========开始读取文件==========");
            //5读取文件read()方法
            System.out.println("========转换后转出=======");
            while((date=fis.read())!=-1){   //!=-1说明文件还有内容=-1时,就说明文件内容读完结束
                char c=(char)date;
                System.out.println(c+"\t");
            }
            System.out.println("=======文件读取结束=========");
            //6.关闭流
            fis.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        

    }

}

结果:

可读取的字节数:7
=========开始读取文件==========
========转换后转出=======
a    
b    
c    
d    
e    
f    
g    
=======文件读取结束=========

小结:FileInputStream

1.read()读取内容,是返回int值

2.需要转换字符

3.read()方法是单程的,

4.一定要关闭流

2.2、字节输出流

package com.pb.io;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;

public class FileOutputStreamDemo1 {

    public static void main(String[] args) {
        
        try {
            //1.实例化FileOutputStream对象,在文件的末尾追加内容
            FileOutputStream fos=new FileOutputStream("d:/test/test.txt",true);
            //2.创建他写入的字符串
            Scanner input=new Scanner(System.in);
            System.out.println("请输入要写入文件的内容:");
            String    str=input.next();
                //3.将内容转换为字节数组
            byte[] bytes=str.getBytes();
            //4.将内容写入
            fos.write(bytes,0,bytes.length);  //3个参数的方法,从0开始到数组结束的全部写入
            System.out.println("文件写入结束!");
            //5.关闭流
            fos.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        

    }

}

结果:

请输入要写入文件的内容:输入e结束
好好学习,天天向上 hello java!
文件写入结束!

test.txt

abcdefg好好学习,天天向上

在进行写操作时,如果文件不存在,将自动创建这个文件,如果上面没test.txt,将会自动创建这个文件,可以试下,将文件删除再运行

 三、综合使用

package pb.io.file;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;

/**
 * 拷贝文件
 * @author 北大青鸟
 *
 */
public class CopyFile {

    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        int date=0;
        System.out.print("请输入您要拷贝的源文件:");
        String file1=input.next();
        System.out.print("请输入您要拷贝的目标位置:");
        String file2=input.next();
        try {
            FileInputStream fis = new FileInputStream(file1);
            FileOutputStream fos = new FileOutputStream(file2);
            while((date=fis.read())!=-1){//读取文件
                char c=(char)date;
         fos.write(c); } fis.close(); fos.close(); System.out.println(
"拷贝成功!"); } catch (FileNotFoundException e) { System.out.println("源文件未找到!"); } catch (IOException ex) { System.out.println(ex.toString()); } } }

 

posted @ 2015-03-01 22:53  森林森  阅读(482)  评论(0编辑  收藏  举报