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

1、何为流?

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

2、控制台输入的读取与输出
(1)读取控制台输入:Java的控制台输入由System.in完成,为了获得一个绑定控制台的字符流,一般将System.in包装在一个BufferedReader对象中来创建一个字符流:

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

(2)从控制台读取多字符输入:使用BufferedReader对象中的read()方法从输入流中读取一个字符作为整数值返回。流结束返回-1。该方法抛出IOException。

BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
do{
c=(char)br.read();
System.out.println(c);
}while(c!='q');

(3)从控制台读取字符串:使用BufferedReader对象中的readLine()方法从输入流中读取字符串。

BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
do{
String str=br.readLine();
System.out.println(str);
}while(!str.equals("qqq"));

*注:JDK5以后,也可以用Java Scanner类来读取控制台的输入。

(4)控制台输出:控制台的输出可以由print()/println()/write()方法实现,这些方法都由类PrintStream定义,System.out是该类对象的一个引用:

int b;
b='a';
System.out.write(b);
System.out.write('\n');
System.out.print(b);//System.out.println(b);

3、读写文件:FileInputStream、FileOutputStream
(1)FileInputStream:用于从目标文件中读取数据。

  • 创建对象:
/*第一种方法:*/
InputStream is=new FileInputStream("C:/Users/.../Desktop/file's name");

/*第二种方法*/
File f=new File("C:/Users/.../Desktop/file's name");
InputStream is=new FileInputStream(f);
  • InputStream对象的操作方法:
    这里写图片描述

(2)FileOutputStream:打开文件(如果流在打开文件进行输出前文件不存在,该流会自动创建该文件)并向目标文件中写数据。

  • 创建方法:
/*第一种方法:*/
OutputStream os=new FileOutputStream("C:/Users/.../Desktop/file's name");

/*第二种方法*/
File f=new File("C:/Users/.../Desktop/file's name");
OutputStream is=new FileOutputStream(f);
  • OutputStream对象的操作方法:
    这里写图片描述

  • InputStream和OutputStream的演示实例:

/*
*由于在流中读取和写入文件时是以二进制形式进行存取的,可能出现乱码的现象,
*故通过创建OutputStreamWriter对象和InputStreamReader对象可以设置编码格式来解决乱码*问题(Windows默认编码格式是GBK)
*/
import java.io.*;
public class FileStreamTest {

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


            byte[] bwrite= {1,2,3,4,5};
            OutputStream os=new FileOutputStream("C:/Users/.../Desktop/test.txt");


            OutputStreamWriter osw=new OutputStreamWriter(os);

            for(int i=0;i<bwrite.length;i++) {
                osw.append(String.valueOf(bwrite[i])); //写入到缓冲区中
                osw.append("\r\n"); //换行
            }
            osw.close(); //关闭写入流,同时把缓冲区的内容写入指定的文件
            os.close(); //关闭输出流,释放系统资源

            InputStream is=new FileInputStream("C:/Users/.../Desktop/test.txt");
            InputStreamReader isr=new InputStreamReader(is);

            StringBuffer sb=new StringBuffer();
            while(isr.ready()) {
                sb.append((char)isr.read());//转成char类型并加入到StringBuffered对象中
            }
            System.out.println(sb.toString());
            isr.close(); //关闭读取流
            is.close(); //关闭输入流,释放系统资源


        }

    }



4、Java 中的目录

(1)创建目录

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

    public static void main(String[] args) {

        File f=new File("C:/Users/.../Desktop/test1");
        File f0=new File("C:/Users/.../Desktop/test");
        f0.mkdirs();
        f.mkdir();

    }

}

(2)读取目录:

  • 一个目录其实就是一个File对象。
  • 通过调用File对象的isDerectory()判断 File对象是否为目录,是则返回true。调用对象的list()方法来提取该目录下包含的文件和文件夹列表。
import java.io.File;
public class DirList {

    public static void main(String[] args) {

        String dirname="C:/Users/.../Desktop/foldername";
        File f=new File(dirname);
        if(f.isDirectory()) {  //如果f是一个目录
            String[] dir=f.list();  //提取目录文件(夹)列表
            System.out.println("目录 : ");

            for(int i=0;i<dir.length;i++) {
                File dirf=new File(dirname+"/"+dir[i]);
                if(dirf.isDirectory()) {
                    System.out.println(dir[i]+" is a directory~");
                }
                else {
                    System.out.println(dir[i]+" isn't a directory~");
                }

            }

        }else {
            System.out.println("The selected file is not a Directory!");
        }


    }

}

(3)删除目录或文件:删除文件使用 java.io.File.delete()方法。

import java.io.File;
public class DirDelete {

    public static void main(String[] args) {

        File f=new File("C:/Users/.../Desktop/test");
        FolderDelete(f);

    }

    public static void FolderDelete(File folder) {
        File[] files=folder.listFiles(); //listFiles()方法包含完整的路径,而list()方法只代表当前的文件名或文件夹名

        if(files!=null) {
            for(File f : files) {
                if(f.isDirectory()) {
                    FolderDelete(f);
                }else {
                    f.delete(); //删除文件
                }
            }
        }
        folder.delete(); //删除文件夹(此时该目录文件夹及其子文件夹均为空文件夹)

    }

}

猜你喜欢

转载自blog.csdn.net/AwayFuture/article/details/80545384