Java中IO的简单举例

package com.kale.io;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

/**
 * @author:Jack Tony
 * @date  :2014-10-12
 */
public class IOTest {

    public static void main(String[] args) {
        //String str = byteRead();
        //byteWrite(str);

        //String readStr = fileReader();
        //fileWriter(readStr);

        //readerWriter();

        //bufferedReader();
    }

    /**
     * 字节流写入
     * @param result
     */
    public static void byteWrite(String result) {
        FileOutputStream fos = null;
        try {
            //将字符串写入到硬盘的一个文件中,这里请确保文件存在
            File file = new File("d:/to.txt");
            if(!file.exists()) {
                file.createNewFile();
            }
            //通过文件来建立流
            fos = new FileOutputStream(file);
            //将字符串转换为byte数组,一次性写入
            fos.write(result.getBytes());

        } catch (FileNotFoundException e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        } catch (IOException e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        }
        finally {
            try {
                fos.flush();
                fos.close();
            } catch (IOException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }

        }
    }

    /**
     * 字节流读出
     * @return
     */
    public static String byteRead() {
        FileInputStream fis = null;
        //存放读取结果的String对象
        String result = "";
        try {
            //通过文件来建立一个流,文件不存在则出现异常
            fis = new FileInputStream(new File("d:/from.txt"));
            //fis读取必须要用到byte[],所以要建立一个byte来存放字节流。这样就可以从文件中一点点读取了
            byte []buffer = new byte[1024*3];
            //每次读取字节的实际数目
            int n = 0;
            //每次读取一个buffer长度,存到buffer中,直到没有读取到字节
            while((n = fis.read(buffer, 0, buffer.length)) > 0) {
                result += new String(buffer,0,n);
            }
            System.out.println("【"+result.trim()+"】");

        } catch (FileNotFoundException e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        } catch (IOException e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        }
        finally {
            try {
                fis.close();
            } catch (IOException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }
        }
        return result;
    }

    /**
     * 通过fileReader来进行读取字符流
     * @return
     */
    public static String fileReader() {
        String result = "";
        FileReader fr = null;
        try {
            fr = new FileReader(new File("d:/reader.txt"));
            //通过这个数组来做缓冲区,一点一点的读入到程序中
            char []c = new char[2];
            //实际读取的字符个数
            int n = 0;
            //循环读取,直到文件的末尾
            while((n = fr.read(c)) != -1) {
                result += new String(c,0,n);
            }
            System.out.println("【"+result+"】");
        } catch (FileNotFoundException e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        } catch (IOException e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        }
        finally {
            try {
                fr.close();
            } catch (IOException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }
        }
        return result;
    }

    /**
     * 将字符流写入到文件中
     * @param str
     */
    public static void fileWriter(String str) {
        FileWriter fw = null;
        try {
            fw = new FileWriter(new File("d:/writer.txt"));
            //将字符串一次性的写入到文件中
            fw.write(str);
        } catch (IOException e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        }
        finally {
            try {
                fw.flush();
                fw.close();
            } catch (IOException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }

        }
    }

    /**
     * 一点一点读,并且将读出来的东西写入到另一个文件中
     */
    public static void readerWriter() {
        FileReader fr = null;
        FileWriter fw = null;
        try {
            fr = new FileReader(new File("d:/reader.txt"));
            //第二个参数为true时,表示追加写入
            fw = new FileWriter(new File("d:/writer.txt"),true);
            //建立缓冲区
            char []c = new char[2];
            //实际读取的字符的个数
            int n = 0;
            //一点一点读出字符,放到char数组中,直到末尾
            while((n = fr.read(c)) != -1) {
                //将char数组中的字符写入文件中
                fw.write(c, 0, n);
            }
            System.out.println("写入成功!");
        } catch (FileNotFoundException e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        } catch (IOException e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        }
        finally {
            try {
                fw.flush();
                fw.close();
                fr.close();
            } catch (IOException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }
        }
    }

    /**
     * 通过BufferedReader来一行一行读取
     * @return 如果正常则返回字符串,如果出错返回null
     */
    public static String bufferedReader() {
        String result = null;
        FileReader fr = null;
        BufferedReader br = null;
        try {
            fr = new FileReader("d:/reader.txt");
            //将File进行包装,可以一行一行的读取了
            br = new BufferedReader(fr);
            String line = null;//定义读取一行字符后存储的String对象
            //用这个来暂时存放string对象
            StringBuilder sb = new StringBuilder("");
            //一行一行读取,读取的东西每次存放到line中
            while((line = br.readLine()) != null){
                //result += line;
                sb.append(line);//将读取的每一行补到StringBuilder后面
            }
            result = sb.toString().trim();
            System.out.println("【"+result+"】");
        } catch (FileNotFoundException e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        } catch (IOException e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        }
        finally {
            try {
                br.close();
                fr.close();
            } catch (IOException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }
        }
        return result;
    }

}
时间: 2024-08-01 22:47:32

Java中IO的简单举例的相关文章

java中IO写文件工具类

下面是一些根据常用java类进行组装的对文件进行操作的类,平时,我更喜欢使用Jodd.io中提供的一些对文件的操作类,里面的方法写的简单易懂. 其中jodd中提供的JavaUtil类中提供的方法足够我们使用,里面的方法写的非常简练,例如append,read等方法,封装更好,更符合面向对象, 这里面我写的一些方法可多都是模仿jodd,从里面进行抽取出来的. /** * 获取路径文件夹下的所有文件 * @param path * @return */ public static File[] ge

java中,一个简单但出错率又大的‘加法’题,1+1+'1'+1+1+1+1+"1"=?

1+1+'1'+1+1+1+1+"1"=? 结果是多少?很多人看了题之后,可能会说结果是71.  当然有的童鞋可能会说很简单,放工具里运行一下就知道结果了,如果不运行代码,你会得出一个什么样的结果呢? 如果告诉你答案是551,会迷惑么?怎么会得出551? 下面我们来看看怎么算的: 1.我们大家都知道1 .'1'."1"的区别,1 表示一个int类型,’1'是表示一个char类型,"1" 表示一个字符串类型. 2.1+1+'1'+1+1+1+1+&

多线程(三) java中线程的简单使用

============================================= 原文链接:多线程(三) java中线程的简单使用 转载请注明出处! ============================================= java中,启动线程通常是通过Thread或其子类通过调用start()方法启动. 常见使用线程有两种:实现Runnable接口和继承Thread.而继承Thread亦或使用TimerTask其底层依旧是实现了Runnabel接口.考虑到java的

java中Object.equals()简单用法

/* equals()方法默认的比较两个对象的引用! */ class Child { int num; public Child(int x){ num = x; } //人文的抛出运行时异常的好处是:可以自定义错误信息! /*public boolean equals(Object o) throws ClassCastException{ if(!(o instanceof Child)) throw new ClassCastException("中文提示:类型错误"); Ch

JAVA中IO总结

JAVA中IO流主要分为两大类: 字节流:InputStream+OutputStream 字符流:Reader+Writer 字节流: InputStream是所有字节输入流的父类 OutputStream是所有字节输出流的父类 FileInputStream从文件中读取数据 FileOutpuStream将数据写入到文件中 ByteArrayInputStream从byte数组中读取数据 ByteArrayOutputStream将数据写入到内存中 PrintStream是一个包装类,它将数

JAVA中IO流总结

本文是在学习中的总结,欢迎转载但请注明出处:http://write.blog.csdn.net/postedit/42119261 我想你对JAVA的IO流有所了解,平时使用的也比较的多,但是对于其具体分类和继承体系可能知道的并不多,可能也很少去看相关的API文档,找出其中的关系和各自的应用情形.本文简单对常用的IO流进行分类整理,并简单举例说明其应用.希望本文对你有所帮助. (A)IO流大致分为两种: (1)字节流:对应抽象类为InputStream(输入流)和 OutputStream(输

JAVA中IO技术:BIO、NIO、AIO

1.同步异步.阻塞非阻塞概念 同步和异步是针对应用程序和内核的交互而言的. 阻塞和非阻塞是针对于进程在访问数据的时候,根据IO操作的就绪状态来采取的不同方式,说白了是一种读取或者写入操作函数的实现方式,阻塞方式下读取或者写入函数将一直等待,而非阻塞方式下,读取或者写入函数会立即返回一个状态值. 由上描述基本可以总结一句简短的话,同步和异步是目的,阻塞和非阻塞是实现方式. 1 同步 指的是用户进程触发IO操作并等待或者轮询的去查看IO操作是否就绪 自己上街买衣服,自己亲自干这件事,别的事干不了.

java中IO及中文乱码问题

第一次发这种博客,所以一直在纠结怎么开头,干脆直奔主题吧,把自己的一些总结体会记录下来,先从简单的学习开始,希望可以慢慢坚持,以后的内容可以写的更好更有意义. 其实真正在工作中中文乱码的问题遇到的不多,那是因为公司为了开发方便所以文件都统一编码了.但是我觉得还有很有必要去稍微了解一下其原理的. IO就是输入输出流,用面向对象来理解的话,就是输入,输出流对象,主要用来操作文件对象.所以再稍微谈谈文件的概念,即File对象.在Java中,File不是我们平时生活中指的某个具体文件,而是某个路径对象,

Java中IO流,输入输出流概述与总结

总结的很粗糙,以后时间富裕了好好修改一下. 1:Java语言定义了许多类专门负责各种方式的输入或者输出,这些类都被放在java.io包中.其中, 所有输入流类都是抽象类InputStream(字节输入流),或者抽象类Reader(字符输入流)的子类: 而所有输出流都是抽象类OutputStream(字节输出流)或者Writer(字符输出流)的子类. [首先需要明白的是:流是干什么的???(为了永久性的保存数据)   根据数据流向的不同分为输入流和输出流:   根据处理数据类型的不同分为字符流和字