Java 流Stream、文件File和I/O

Java 流Stream、文件File和I/O

Java.io包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标。输入流InputStream表示从一个源读取数据,输出流OutputStream表示向一个目标写数据。

读取控制台输入

Java输入控制台由System.in读取完成。为了获得一个连接到控制台基于字符的数据流,包装System.in在一个BufferedReader对象,创建一个字符流。
基本语法:

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

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

从控制台读取字符:

读取一个字符用BufferedReader的read()方法:

int read( ) throws IOException

每次调用read()方法,它从输入流读取一个字符并把该字符作为整数值返回。 当流结束的时候返回-1。方法抛出IOException。
例子:循环读取一个字符并输出,当字符为q退出。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Test {
    public static void main(String args[]) throws IOException{
        char c;
        System.out.print("输入一个字符串以q结束:");
        // 使用 System.in 创建 BufferedReader 
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        // 读取字符
        do{
            c = (char) br.read();
            System.out.print(c);
        }while(c != 'q');
    }
}

程序运行结果:

输入一个字符串以q结束:javareadq
j
a
v
a
r
e
a
d
q

读取一个字符串用BufferedReader的readLine()方法。

String readLine( ) throws IOException

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Test {
    public static void main(String args[]) throws IOException{
        // 使用 System.in 创建 BufferedReader 
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str;
        System.out.print("输入字符串,以quit结束:");
        do {
            str = br.readLine();
            System.out.println(str);
        } while(!str.equals("quit"));
    }
}

程序运行结果:

输入字符串,以quit结束:java read quit
java read quit

控制台输出

控制台的输出由 print( ) 和println( )完成。这些方法都由类PrintStream 定义,System.out是该类对象的一个引用。 PrintStream 继承了OutputStream类,并且实现了方法write()。也就是说,write()也可以用来往控制台写操作。
PrintStream 定义write()的最简单格式:

void write()

例子:

public class Test {
    public static void main(String args[]){
        int str;
        str = 'A';
        System.out.write(str);
        System.out.write('\n');
    }
}

程序运行结果:

A

读写文件

FileInputStream:

用一个文件名作为一个字符串创建一个输入流对象来读取文件:

InputStream f = new FileInputStream(“C:/java/HelloWork.txt”);

  1. public void close() throws IOException{}
    关闭文件输入流并释放与此流有关的所有系统资源。抛出IOException异常。

  2. protected void finalize()throws IOException {}
    清除与该文件的连接。确保在不再引用文件输入流时调用其 close 方法。抛出IOException异常。

  3. public int read(int r)throws IOException{}
    此方法从InputStream对象读取指定字节的数据。返回int。返回下一字节数据,如果已经到结尾则返回-1。
  4. public int read(int r) throws IOException{}
    这个方法从输入流读取r.length长度的字节。返回读取的字节数。如果是文件结尾则返回-1。
  5. public int available() throws IOException{}
    可以从该文件输入流中读取的字节数。返回int。
FileOutputStream

文件输出流是用于创建一个文件并写入数据。如果文件不存在,流会创建一个文件。

OutputStream f = new FileOutputStream(“C:/java/HelloWork.txt”);

  1. public void close() throws IOException{}
    关闭此文件输入流并释放与此流有关的所有系统资源。抛出一个IOException
  2. protected void finalize()throws IOException {}
    清除连接到该文件。确保此文件输出流的close方法被调用时此流不再被引用。抛出IOException异常。
  3. public void write(int w)throws IOException{}
    此方法将指定字节写入到输出流。
  4. public void write(byte[] w)
    把指定数组中w.length长度的字节写到OutputStream中。

文件写入读取例子:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Test{
    public static void main(String[] args) throws IOException {
        File file = new File("java.txt");
        // 构建FileOutputStream对象,文件不存在会自动新建
        FileOutputStream fop = new FileOutputStream(file);
        // 构建OutputStreamWriter对象,参数可以指定编码.
        OutputStreamWriter writer = new OutputStreamWriter(fop, "UTF-8");
        // 写入到缓冲区       
        writer.append("中文输入");
        writer.append("\n");
        // 刷新缓存冲,写入到文件,如果下面已经没有写入的内容了,直接close也会写入
        writer.append("Java File");
        //关闭写入流,同时会把缓冲区内容写入文件,所以上面的注释掉
        writer.close();
        // 关闭输出流,释放系统资源
        fop.close();
        // 构建FileInputStream对象
        FileInputStream fip = new FileInputStream(file);
        // 构建InputStreamReader对象,编码与OutputStreamWriter相同
        InputStreamReader reader = new InputStreamReader(fip, "UTF-8");
        StringBuffer sb = new StringBuffer();
        while (reader.ready()) {
            // 转成char类型添加到StringBuffer对象中
            sb.append((char) reader.read());
        }
        System.out.println(sb.toString());
        // 关闭读取流
        reader.close();
        // 关闭输入流,释放系统资源
        fip.close();
    }
}

文件和I/O

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

创建目录,执行代码,创建C:/Users/win8/Desktop/HelloWork文件。例子:

import java.io.File;

public class Test {
    public static void main(String args[]) {
        String fileName = "C:/Users/win8/Desktop/HelloWork";
        File newFile = new File(fileName);
        newFile.mkdirs();
    }
}
读取目录:

一个目录其实就是一个File对象,它包含其他文件和文件夹。当创建一个文件对象,并且它是一个目录,那么调用isdirectory()方法将返回true。可以通过调用该对象上的list()方法,来提取它包含的文件和文件夹的列表。
使用 list( )来检查一个目录的内容的例子:

import java.io.File;

public class FileDemo {
    public static void main(String[] arg){
        //定义文件路径
                String dir = "C:/Users/win8/Desktop/HelloWork";
                //根据给定路径名字符串,创建File实例
                File file = new File(dir);
                //判断file实例是否是文件夹
                if(!file.exists()){
                    file.mkdirs();
                }
                if(file.isDirectory()) {
                    //将文件夹下的文件名转成字符串数组
                    String[] filePaths = file.list();
                    //遍历文件夹下文件名
                    for (String path : filePaths) {
                        //拼接文件夹路径和文件路径
                        String fileDir = dir.concat("/").concat(path);
                        //创建新的实例
                        File file2 = new File(fileDir);
                        //判断是否为文件夹
                        if(file2.isDirectory()) {
                            System.out.println(file2+" :是一个文件夹");
                        } else {
                            System.out.println(file2 + ":是一个文件");
                        }
                    }
                } else {
                    System.out.println(file.getAbsolutePath()+":不是文件夹");
                }
    }
}

程序运行结果:

C:\Users\win8\Desktop\HelloWork\file1 :是一个文件夹
C:\Users\win8\Desktop\HelloWork\file2 :是一个文件夹
C:\Users\win8\Desktop\HelloWork\test1.txt:是一个文件
C:\Users\win8\Desktop\HelloWork\test2.docx:是一个文件

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值