java流文件以及IO

Posted 故乡春暖花开

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java流文件以及IO相关的知识,希望对你有一定的参考价值。

读写文件

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

输入流和输出流的类层次图。

FileInputStream

FileInputStream用于从文件中读取数据,它的对象可以用关键字new创建,

InputStream file = new FileInputStream("D:\\BI\\201603\\MyBi");

或者

File file = new File("D:\\BI\\201603\\MyBi");

InputStream file = new FileInputStream(f);

InputStream提供的对流的操作的方法:

序号方法及描述
1 public void close() throws IOException{}
关闭此文件输入流并释放与此流有关的所有系统资源。抛出IOException异常。
2 protected void finalize()throws IOException {}
这个方法清除与该文件的连接。确保在不再引用文件输入流时调用其 close 方法。抛出IOException异常。
3 public int read(int r)throws IOException{}
这个方法从InputStream对象读取指定字节的数据。返回为整数值。返回下一字节数据,如果已经到结尾则返回-1。
4 public int read(byte[] r) throws IOException{}
这个方法从输入流读取r.length长度的字节。返回读取的字节数。如果是文件结尾则返回-1。
5 public int available() throws IOException{}
返回下一次对此输入流调用的方法可以不受阻塞地从此输入流读取的字节数。返回一个整数值。

FileOutputStream

FileInputStream用来创建一个文件并向文件中写数据。如果目标文件不存在,该流回创建文件。

OutputStream  f = new FileOutputStream("D:\\BI\\201603\\MyBi");

或者

File file = new File("D:\\BI\\201603\\MyBi");

OutputStream f = new FileOutputStream(file);

OutputStream类提供了一下方法操作文件 

 

序号方法及描述
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中。

实例

package per.test;

import java.io.*;
public class fileStreamTest{
    public static void main(String[] args) {
        try {
            byte[] bWrite = {1,11,2,3};
//            OutputStream os = new FileOutputStream("D:\\\\BI\\\\test.txt");//不存在,会自动新建
//            for (int x=0;x<bWrite.length;x++) {
//                os.write(bWrite[x]);//以二进制形式写进文件里,有乱码问题
//            }
//            os.close();
            
            File file = new File("D:\\\\BI\\\\test.txt");
            FileOutputStream os = new FileOutputStream(file);
            // 构建FileOutputStream对象,文件不存在会自动新建
            OutputStreamWriter writer = new OutputStreamWriter(os, "UTF-8");
            // 构建OutputStreamWriter对象,参数可以指定编码,默认为操作系统默认编码,windows上默认gbk
            writer.append("你说起那条回家的路,路上有开满鲜花的树");
            writer.close();
            //关闭写入流,同时会把缓冲区内容写入文件
            os.close();
            // 关闭输出流,释放系统资源
            
            
//            InputStream is = new FileInputStream("D:\\\\BI\\\\test.txt");
//            int size = is.available();
//            for (int i=0;i<size;i++) {
//                System.out.print((char)is.read()+" ");//有乱码问题
//            }
//            is.close();
            FileInputStream is = new FileInputStream(file);
            InputStreamReader reader = new InputStreamReader(is,"uft-8");//与读入时候的编码一致
            StringBuffer sb = new StringBuffer();
            while (reader.ready()) {
                sb.append((char) reader.read());
                // 转成char加到StringBuffer对象中
            }
            System.out.println(sb.toString());
            reader.close();
            // 关闭读取流
            is.close();
            // 关闭输入流,释放系统资源
        }catch (IOException e){
            System.out.print("IOException");
        }
        
    }
}

DataInputStream类和DataOutputStream类

数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型以及与机器无关方式将Java基本数据类型写到底层输出流。

下面的构造方法用来创建数据输入、输出流对象。

DataInputStream dis = DataInputStream(InputStream in);
DataOutputStream out = DataOutputStream(OutputStream  out);
实例
package per.test;

import java.io.*;
public class fileStreamTest{
    public static void main(String[] args) {
        try {
                        DataInputStream d = new DataInputStream(new
                        FileInputStream("D:\\\\BI\\\\test.txt"));

            DataOutputStream out = new DataOutputStream(new
                                FileOutputStream("D:\\\\BI\\\\test1.txt"));
            
            String count;
            while((count = d.readLine()) != null){
            String u = count.toUpperCase();
            System.out.println(u);
                out.writeBytes(u + "  ,");
//                out.writeInt(Integer.parseInt(u));
//                out.writeFloat(Float.parseFloat(u));
            }
            d.close();
            out.close();
                }catch (IOException e){
            System.out.print("IOException");
        }
        
    }
}        

 

File类创建目录

File类中有两个方法可以用来创建文件夹:

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

public class CreateDir {
   public static void main(String args[]) {
      String dirname = "/tmp/user/java/bin";
      File d = new File(dirname);
      d.mkdirs();//递归创建目录
  }
}

File类读取目录

实例--查看一个路径是否是文件夹,以及该文件夹下有哪些文件以及子文件夹

import java.io.File;

public class DirList {
   public static void main(String args[]) {
      String dirname = "/tmp";
      File f1 = new File(dirname);
      if (f1.isDirectory()) {//该对象代表一个目录
         System.out.println( "Directory of " + dirname);
         String s[] = f1.list();//提取该对象包含的文件和文件夹的列表。
         for (int i=0; i < s.length; i++) {
            File f = new File(dirname + "/" + s[i]);
            if (f.isDirectory()) {
               System.out.println(s[i] + " is a directory");
            } else {
               System.out.println(s[i] + " is a file");
            }
         }
      } else {
         System.out.println(dirname + " is not a directory");
    }
  }
}

 

 

 

以上是关于java流文件以及IO的主要内容,如果未能解决你的问题,请参考以下文章

java开发知识IO知识之输入输出流以及文件

java流文件以及IO

java IO流实现删除文件夹以及文件夹中的内容

Java 学习笔记 - IO篇:常见的IO流Stream以及相互关系

Java IO—缓冲字符流以及IO中的装饰者模式

Java IO—基本文件字符流FileWriterFileReader