• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • YouClaw
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
风吹花落泪如雨
博客园    首页    新随笔    联系   管理    订阅  订阅

JAVA输入/输出(一)-----File类和节点流(字节流、字符流)

一、File类

1、访问文件和目录

package com;

import java.io.File;
import java.io.IOException;

public class File1 {

    public static void main(String[] args) throws IOException {
        //以当前路径来创建一个File对象 
        File file = new File(".");
        //返回File对象的文件名
        System.out.println(file.getName());
        //获取File对象对应目录的父目录名
        System.out.println(file.getParent());
        //获取绝对路径(返回File对象)
        System.out.println(file.getAbsoluteFile());
        //获取绝对路径(返回字符串)
        System.out.println(file.getAbsolutePath());
        //获取上一级路径
        System.out.println(file.getAbsoluteFile().getParent());
        
        //在file路径下创建一个临时文件
        File tmpFile = File.createTempFile("aaa", ".txt",file);
        //当JVM退出时删除该文件
        tmpFile.deleteOnExit();
        
        //以系统当前时间为新文件名来创建新文件
        File newFile = new File(System.currentTimeMillis() + "");
        System.out.println("newFile对象是否存在: " + newFile.exists());
        //以指定newFile对象来创建一个文件
        newFile.createNewFile();
        //以newFile对象来创建一个目录,因为已存在newFile,返回false。
        newFile.mkdir();
        
        String[] fileList = file.list();
        System.out.println("=====当前路径下所有文件和路径如下=====");
        for(String fileName : fileList) {
            System.out.println(fileName);
        }
        
        File[] roots = File.listRoots();
        System.out.println("=====系统所有根路径如下=====");
        for(File root : roots) {
            System.out.println(root);
        }
    }
}

2、文件过滤器

在File的list()中可以接收一个FilenameFilter参数,通过该参数可以只列出符合条件的文件。

FilenameFilter接口里包含了一个accept(File dir, String name)方法,是一个函数式接口。

import java.io.File;
public class FilenameFilterTest {
    public static void main(String[] args) {
        File file = new File(".");
        //如果文件以.java结尾或文件对应一个目录,返回true
        String[] nameList = file.list((dir,name) -> name.endsWith(".java") || new File(name).isDirectory());
        for(String name : nameList) {
            System.out.println(name);
        }
    }
}

 

二、字节流和字符流

1、InputStream和Reader

int read():读取单个字节/字符

int read(byte[] b)   int read(char[] b):读取最多b.length个字节/字符数据,存储在字节/字符数组b中

int read(byte[] b, int off, int len)   int read(char[] b, int off, int len):从off位置开始,读取最多len个字节/字符数据,存储在字节/字符数组b中

 

import java.io.FileInputStream;
import java.io.IOException;
public class FileInputStreamTest {
    public static void main(String[] args) throws IOException {
        //创建字节输入流
        FileInputStream fis = new FileInputStream("aaa.java");
        byte[] bbuf = new byte[1024];
        int hasRead = 0;
        while((hasRead = fis.read(bbuf)) > 0) {
            //将bbuf字节数组从0开始的hasRead长度,转为字符串
            System.out.println(new String(bbuf, 0 , hasRead));
        }
        fis.close();
    }
}

Java7改写了所有IO资源类,它们都实现了AutoCloseable接口,因此都可通过自动关闭资源的try语句来关闭这些IO流。

import java.io.FileReader;
import java.io.IOException;

public class FileInputStreamTest {
    public static void main(String[] args) throws IOException {
        try(FileReader fr = new FileReader("aaa.java")){
            char[] cbuf = new char[32];
            int hasRead = 0;
            while((hasRead = fr.read(cbuf)) > 0) {
                //将cbuf字符数组从0开始的hasRead长度,转为字符串
                System.out.println(new String(cbuf, 0 , hasRead));
            }
        }catch(IOException ex){
            ex.printStackTrace();
        }
    }
}

2、OutputStream和Writer

void write(int c):将指定的字节/字符输出到输出流中,c可代表字节或者字符。

void write(byte[]/char[] b) :将字节/字符数组中的数据输出到指定输出流中。

void write(byte[]/char[] buf, int off, int len):将字节/字符数组从off位置开始,长度为len的字节/字符输出到输出流中。

因为字符流直接以字符为操作单位,所以Writer可以用字符串来代替字符数组

void write(String str) :将str字符串里包含的字符输出到指定输出流中。

void write(String str, int off, int len):将str字符串从off位置开始,长度为len的字符输出到输出流中。

实现复制文件的功能:

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileOutputStreamTest {

    public static void main(String[] args) {
        try(FileInputStream fis = new FileInputStream("aaa.java");
            FileOutputStream fos = new FileOutputStream("aaa2.java"))
        {
            byte[] bbuf = new byte[32];
            int hasRead = 0;
            while((hasRead = fis.read(bbuf)) > 0) {
                fos.write(bbuf, 0, hasRead);
            }
        }catch(IOException ex){
            ex.printStackTrace();
        }
    }
}

直接输出字符串内容:

import java.io.FileWriter;
import java.io.IOException;

public class FileWriterTest {

    public static void main(String[] args) {
        try(FileWriter fw = new FileWriter("aaa3.java"))
        {
            fw.write("11111111111111\r\n");
            fw.write("2222222222\r\n");
        }catch(IOException ex){
            ex.printStackTrace();
        }
    }
}

 

posted @ 2018-08-19 15:29  风吹花落泪如雨  阅读(165)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3