码迷,mamicode.com
首页 > 编程语言 > 详细

Java基础知识之IO(1)

时间:2015-05-29 10:11:29      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:file   javaio   

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.separator+"1.txt";
        //实例化文件类
        File file = new File(path);
        //判断是否为路径
        System.out.println("是否为路径:"+file.isDirectory());
        //判断文件是否存在
        if(file.exists()){
            System.out.println("文件存在!");
            file.delete();//删除文件
        }else{
            System.out.println("文件不存在,但是已经创建。。。");
            try {
                file.createNewFile();//创建文件,可能抛出异常
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

列出一个指定目录下的所有文件夹,及文件夹内部的文件夹

import java.io.File;

public class FileDemo2 {
    private static File f;
    private static File[] fs;
    public static void main(String[] args) {
        String path = "D:"+File.separator+"Android.7z";//指定目录
        fun(path);//列出该目录下的所有子目录,及子目录内容
    }
    public static void fun(String s){
        f = new File(s);//实例化File类
        if(f.isDirectory()){//判断是否为路径
            fs = f.listFiles();//列出
            for(File t:fs){
                System.out.println(t);
                if(t.isDirectory()){
                    fun(t.toString());
                }
            }
        }else{
            System.out.println(f);
        }
    }
}

File类只能对一个文件本身进行操作,若想对文件内容进行操作,需要RandomAccessFile类

RandomAccessFile

使用RandomAccessFile类进行文件读写操作

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;

public class Demo2 {
    public static void main(String[] args) throws IOException {
        write("这里演示文件的读写操作","d:"+File.separator+"1.txt");
        System.out.println(read("d:"+File.separator+"1.txt"));
    }
    //内容写入文件,会从头开始覆盖原始内容
    public static void write(String s,String path) throws IOException{
        File file = new File(path);
        //实例化RandomAccessFile实例,指定操作模式为“读写”模式,该模式下,若文件不存在,则自动创建
        RandomAccessFile rfile = new RandomAccessFile(file, "rw");
        rfile.write(s.getBytes());//以字节形式写入
        rfile.close();
    }
    //读出文件内容
    public static String read(String path) throws IOException{
        File file = new File(path);
        //实例化RandomAccessFile实例,指定操作模式为“读写”模式,该模式下,若文件不存在,则自动创建
        RandomAccessFile rfile = new RandomAccessFile(file, "r");
        int len = (int)file.length();//得到文件的大小,以字节形式
        byte[] ss = new byte[len];//根据文件大小声明字节数组大小
        for(int i=0;i<len;i++){//循环读取每一个字节
            ss[i]=rfile.readByte();
        }
        rfile.close();
        //调用String类的构造,生成新字符串
        return new String(ss);
    }
}

字节流和字符流

1、字节流
OutputStream类用于字节的输出
InputStream类用于字节的读入
2、字符流
Writer类用于字符的输出
Reader类用于字符的读入
这里的输出,读入是相对于我们大家写的程序而言,在程序中将数据写到程序外,叫输出;相反,从程序外得到数据供程序使用,叫读入;
在演示之前呢,先规范下Java中IO操作的基本步骤:
1、使用File类找到一个文件
2、使用字节流或字符流的子类为OutputStream、InputStream、Writer、Reader进行实例化
3、进行读写操作
4、关闭流

OutputStream

输出数据实例

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

public class FileOutputStreamDemo {
    public static void main(String[] args) throws IOException {
        //文件路径,要确保改路径存在
        String path = "E:"+File.separator+"javaio"+File.separator+"FileOutputStream.txt";

        //使用File类找到文件
        File file = new File(path);
        //实例化OutputStream类
        OutputStream out  = new FileOutputStream(file,true);//加入参数true表示可以在文件内容后追加内容
        //进行输出操作,向文件中写入数据时,\r\n表示换行
        out.write(("\r\n"+"这是FileOutputStream演示实例").getBytes());
        //关闭流
        out.close();
    }
}

InputStream

读入数据实例

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

public class FileInputStreamDemo {
    public static void main(String[] args) throws IOException {
        //文件路径
        String path = "E:"+File.separator+"javaio"+File.separator+"FileOutputStream.txt";
        //实例化文件
        File file = new File(path);
        //实例化InputStream
        InputStream in = new FileInputStream(file);
        //读入数据
        int len = (int)file.length();//文件所占字节数
        byte[] bytes = new byte[len];//存储空间
        in.read(bytes);//得到数据
        System.out.println(new String(bytes));//输出
        //关闭流
        in.close();
    }
}

Writer

输出数据实例

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

public class FileWriterDemo {
    public static void main(String[] args) throws IOException {
        //文件路径
        String path = "E:"+File.separator+"javaio"+File.separator+"FileWriter.txt";
        //实例化文件
        File file = new File(path);
        //实例化Writer类对象
        Writer writer = new FileWriter(file,true);
        //输出数据
        writer.write("这是FileWriter演示实例  "+"\r\n");
        //关闭流
        writer.close();
    }
}

Reader

读入数据实例

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

public class FileReaderDemo {
    public static void main(String[] args) throws IOException {
        // 文件路径
        String path = "E:" + File.separator + "javaio" + File.separator+ "FileWriter.txt";
        // 实例化文件
        File file = new File(path);
        //实例化Reader实例
        Reader r = new FileReader(file);
        //读入数据
        int len = (int)file.length();//文件大小
        char[] cbuf = new char[len];//存储空间
        len = r.read(cbuf);//读入数据,返回数据长度
        System.out.println(len);
        System.out.println(new String(cbuf,0,len));
        //关闭流
        r.close();
    }
}

说明下OutputStream和Writer的区别:
OutputStream在操作文件时,直接将字节内容写入文件,而Writer会先把字符写入缓存区,然后写入文件,若将上面Writer的例子中的“流关闭”动作去掉,可以发现,文件中根本不会有内容出现。实际上,计算机内部的数据存储形式都是字节形式的,所以个人感觉字节流可以搞定一切数据形式。

好了,今天到这里吧。。。

Java基础知识之IO(1)

标签:file   javaio   

原文地址:http://blog.csdn.net/u012437355/article/details/46129477

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!