文件类:
java.io.File
基本方法;
geName: 获取文件名称
getPath: 获取文件路径
length: 获取文件大小
isDirectory: 判断这个东西是不是一个目录
isFile: 判断这个东西是不是一个文件

IO流
什么是流
流, 可以看成是一根管道, 用来读取文件的数据

流的分类
按照数据流的方向
输入流(Input), 输出流(Output)
输入流: 从文件往程序走数据
输出流: 从程序往文件走数据

按照处理数据的单位不同:

byte(1), short(2), int(4), long(8)
float(4), double(8)
boolean(1)
char(2)

字节流(以stream结尾的), 字符流(以Reader, Writer结尾的)
字节流: 一个字节占8位, 以一个字节为单位读数据
字符流: 一个字符占两个字节, 以一个字符为一个单位

按照功能分:
节点流, 处理流
节点流: 只有一个根管道套在文件上进行传输
处理流: 将节点流处理一下, 增强管道的功能, 相当于在管道上套一层

JDK提供的流
提供了四个基本抽象类: InputStream, OutputStream, Reader, Writer

InputStream的基本方法:
int read(): 每次调用这个方法, 就读取一个字节, 以整数的形式返回

int read(byte[] buffer---缓冲区): 让流每次读满一个缓冲区, 再统一处理, 先存在缓冲区里, 返回值int是返回实际当中读取了多少字节数(伤硬盘的原理)

int read(byte[] buffer, int offset, int length): 也是一个缓冲区, 读取length长度的字节数, 存到buffer的缓冲区里, 从buffer的offset位置开始存, 返回值是实际读了多少字节数

close(): 关闭资源

OutputStream的基本方法:
void write(int b)

void write(byte[] b)

int read(byte[] buffer, int offset, int length)

close()

flush(): 将缓冲区中的文件全部写出

在使用流的时候的一个良好的习惯, 先flush, 再close

Reader的基本方法:
int read()
int read(char[] c)
int read(char[] c, int offset, int length)
close()

Writer的基本方法:
void write()
void write(char[] c)
void write(char[] c, int offset, int length)
// 直接写一个字符串出去, 字符串里面的有一个方法s.toCharArray(), 查API
void write(String s)
void write(String s, int offset, int length)
close()
flush()

字节流
字符流
缓冲流
转换流--->字节-字符
数据流--->八大数据类型
Print流--->System.out.println();
Object流--->

 

之前做过一个宠物乱斗的程序,但是没有存档读档的功能,现在用流的知识可以做一个这样的功能,如下:

package com.maya.util;

import java.io.FileReader;
import java.io.FileWriter;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import com.maya.pet.Pet;

public class SaveReadUtil
{
    public static final String CONFIGPATH = "e:\\java\\petconf.bat";

    public static Pet readPet() {
        File file = new File(CONFIGPATH);
        Pet pet = new Pet();
        try{
            FileReader fr = new FileReader(CONFIGPATH);
            BufferedReader br = new BufferedReader(fr);

            pet.setName(br.readLine());
            pet.setAge(Integer.parseInt(br.readLine()));
            pet.setSex(br.readLine());
            pet.setBirthday(DateFormat.convert(br.readLine()));
            pet.setHealthy(Integer.parseInt(br.readLine()));
            pet.setHungry(Integer.parseInt(br.readLine()));
            pet.setHappy(Integer.parseInt(br.readLine()));

        } catch(Exception e) {
            System.out.println("读取数据出现异常 !");
            return null;
        }

        return pet;
    }


    public static void savePet(Pet pet) {
        File file = new File(CONFIGPATH);
        try{
            FileWriter fw = new FileWriter(file);
            BufferedWriter bw = new BufferedWriter(fw);
            
            bw.write(pet.getName());
            bw.newLine();
            bw.write(pet.getAge() + "");
            bw.newLine();
            bw.write(pet.getSex());
            bw.newLine();
            bw.write(DateFormat.convert(pet.getBirthday()));
            bw.newLine();
            bw.write(pet.getHealthy() + "");
            bw.newLine();
            bw.write(pet.getHungry() + "");
            bw.newLine();
            bw.write(pet.getHappy() + "");

            bw.close();
        } catch(Exception e) {
            System.out.println("保存出现异常 !");
        }




    }
}

buffered很好用,可以成行的操作

posted on 2017-06-14 14:04  缘来狠狂  阅读(213)  评论(0编辑  收藏  举报