Java 流(Stream)、文件(File)和IO

一个流可以理解为一个数据的序列。输入流表示从一个源读取数据,输出流表示向一个目标写数据。


读取控制台输入

为了获得一个绑定到控制台的字符流,你可以把 System.in 包装在一个 BufferedReader 对象中来创建一个字符流。

下面是创建 BufferedReader 的基本语法:

BufferedReader br =new BufferedReader(new

        InputStreamReader(System.in));

BufferedReader 对象创建后,我们便可以使用 read() 方法从控制台读取一个字符,或者用 readLine() 方法读取一个字符串。


从控制台读取多字符输入  read() 方法

下面的程序示范了用 read() 方法从控制台不断读取字符直到用户输入 "q"。

//使用 BufferedReader 在控制台读取字符

import java.io.*;

public class BRRead {

public static void main(String args[])throws IOException {

char c;

        // 使用 System.in 创建BufferedReader

        BufferedReader br =new BufferedReader(new InputStreamReader(System.in));

        System.out.println("输入字符, 按下 'q' 键退出。");

        // 读取字符

        do {

c = (char) br.read();

            System.out.println(c);

        }while (c !='q');

    }

}

运行结果如下:

输入字符, 按下 'q' 键退出。

run

r

u

q

q


从控制台读取字符串 readLine() 方法

下面的程序读取和显示字符行直到你输入了单词"end"。

//使用 BufferedReader 在控制台读取字符

import java.io.*;

public class BRReadLines {

public static void main(String args[])throws IOException {

// 使用 System.in 创建BufferedReader

        BufferedReader br =new BufferedReader(new InputStreamReader(System.in));

        String str;

        System.out.println("Enter lines of text.");

        System.out.println("Enter 'end' to quit.");

        do {

str = br.readLine();

            System.out.println(str);

        }while (!str.equals("end"));

    }

}

以上实例编译运行结果如下:

Enter lines of text.

Enter 'end' to quit.

This is line one

This is line one

This is line two

This is line two

end

end


读写文件

一个流被定义为一个数据序列。输入流用于从源读取数据,输出流用于向目标写数据。

下图是一个描述输入流和输出流的类层次图。



FileInputStream

该流用于从文件读取数据

两种构造方法:

InputStream f = new FileInputStream("C:/java/hello");

File f = new File("C:/java/hello");

InputStream out = new FileInputStream(f);


常用方法

FileOutputStream

该类用来创建一个文件并向文件中写数据。

如果该目标文件不存在,那么该流会创建该文件。

两个构造方法:

OutputStream f = new FileOutputStream("C:/java/hello")

File f = new File("C:/java/hello");

OutputStream f = new FileOutputStream(f);


常用方法

实例

InputStream 和 OutputStream 用法的例子:

二进制写入,可能存在乱码:

import java.io.*;

public class fileStreamTest {

public static void main(String args[]) {

try {

byte bWrite[] = {11, 21, 3, 40, 5 };

            OutputStream os =new FileOutputStream("test.txt");

            for (int x =0; x < bWrite.length; x++) {

os.write(bWrite[x]); // writes the bytes

            }

os.close();

            InputStream is =new FileInputStream("test.txt");

            int size = is.available();

            for (int i =0; i < size; i++) {

System.out.print((char) is.read() +"  ");

            }

is.close();

        }catch (IOException e) {

System.out.print("Exception");

        }

}

}

解决乱码示例:

//文件名:fileStreamTest2.java

import java.io.*;

public class fileStreamTest2 {

public static void main(String[] args)throws IOException {

File f =new File("a.txt");

        FileOutputStream fop =new FileOutputStream(f);

        // 构建FileOutputStream对象,文件不存在会自动新建

        OutputStreamWriter writer =new OutputStreamWriter(fop, "UTF-8");

        // 构建OutputStreamWriter对象,参数可以指定编码,默认为操作系统默认编码,windows上是gbk

        writer.append("中文输入");

        // 写入到缓冲区

        writer.append("\r\n");

        // 换行

        writer.append("English");

        // 刷新缓存冲,写入到文件,如果下面已经没有写入的内容了,直接close也会写入

        writer.close();

        // 关闭写入流,同时会把缓冲区内容写入文件,所以上面的注释掉

        fop.close();

        // 关闭输出流,释放系统资源

        FileInputStream fip =new FileInputStream(f);

        // 构建FileInputStream对象

        InputStreamReader reader =new InputStreamReader(fip, "UTF-8");

        // 构建InputStreamReader对象,编码与写入相同

        StringBuffer sb =new StringBuffer();

        while (reader.ready()) {

sb.append((char) reader.read());

            // 转成char加到StringBuffer对象中

        }

System.out.println(sb.toString());

        reader.close();

        // 关闭读取流

        fip.close();

        // 关闭输入流,释放系统资源

    }

}


Java中的目录


创建目录:

File类中有两个方法创建文件夹:

mkdir( )方法创建一个文件夹,成功则返回true,失败则返回false。失败表明File对象指定的路径已经存在,或者由于整个路径还不存在,该文件夹不能被创建。

mkdirs()方法创建一个文件夹和它的所有父文件夹。

读取目录:

一个目录其实就是一个 File 对象,它包含其他文件和文件夹。

如果创建一个 File 对象并且它是一个目录,那么调用 isDirectory() 方法会返回 true。

可以通过调用该对象上的 list() 方法,来提取它包含的文件和文件夹的列表。

String s[] = f1.list();



删除目录或文件

当删除某一目录时,必须保证该目录下没有其他文件才能正确删除,否则将删除失败。

测试目录结构:

/tmp/java/

|-- 1.log

|-- test

import java.io.File;

public class DeleteFileDemo {

public static void main(String args[]) {

// 这里修改为自己的测试目录

        File folder =new File("/tmp/java/");

        deleteFolder(folder);

    }

// 删除文件及目录

    public static void deleteFolder(File folder) {

File[] files = folder.listFiles();

        if (files !=null) {

for (File f : files) {

if (f.isDirectory()) {

deleteFolder(f);

                }else {

f.delete();

                }

}

}

folder.delete();

    }

}





        本文参考  菜鸟教程Java IO  

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容