Java文件操作与输入输出流

文件操作

package ch15;

import java.io.*;

/**
 * Created by Jiqing on 2016/12/28.
 */
public class FileTest {
    public static void main(String[] args) throws IOException{
        // 以当前路径创建一个File对象
        File file = new File(".");
        System.out.println(file.getName());
        // 获取相对路径
        System.out.println(file.getParent());
        // 获取绝对路径
        System.out.println(file.getAbsoluteFile()); //C:\Users\e550\IdeaProjects\crazyJava\.
        // 获取上级路径
        System.out.println(file.getAbsoluteFile().getParent()); //C:\Users\e550\IdeaProjects\crazyJava

        // 在当前路径下创建一个临时文件
        File tmpFile = File.createTempFile("temp",".txt",file);
        // 指定当JVM退出时删除文件
        tmpFile.deleteOnExit();

        // 使用list()方法列出当前路径下所有文件和路径
        String[] fileList = file.list();
        System.out.println("====当前路径下所有文件和路径如下====");
        for (String fileName :fileList) {
            System.out.println(fileName);
        }

        // listRoots() 静态方法列出所有磁盘根路径
        File[] roots = File.listRoots();
        for(File root:roots) {
            System.out.println(root);
        }
    }
}

执行结果:

. null C:\Users\e550\IdeaProjects\crazyJava. C:\Users\e550\IdeaProjects\crazyJava 当前路径下所有文件和路径如下 .git .idea crazyJava.iml image out src temp108678927822844352.txt C:
D:
E:
F:\

方法论:尝试自己改造一下,能够加深对内容的理解。

Java可以读取并操作文件,还是蛮厉害的。

Java中的IO流

在Java中把不同的输入输出源(键盘、文件、网路连接)抽象表述为“流”。

1.输入流、输出流

2.字节流、字符流

字节流通过InputStream和OutputStream来操作,数据单元是8位的字节

字符流通过Reader和Writer来操作,数据单元是16位的字符

3.节点流、处理流

处理流可以包装节点流进行数据传输,通过处理流,Java程序无需理会输入输出节点是磁盘、网络还是其他输入输出设备,程序只要将节点包装成处理流,就可以使用相同的输入、输出代码来读不通的输入输出设备的数据。

package ch15;

import java.io.*;

/**
 * Created by Jiqing on 2016/12/28.
 */
public class FileInputStreamTest {
    public static void main(String[] args) throws IOException {
        File file = new File(".");
        // 创建字节输入流
        FileInputStream fis = new FileInputStream(file.getAbsoluteFile().getParent()+"/src/ch15/FileInputStreamTest.java");

        // 创建一个长度为1024的竹筒
        byte[] bbuf = new byte[1024];

        // 保存实际读取的字节数
        int hasRead = 0;

        // 使用循环来重复“取水”
        while ((hasRead = fis.read(bbuf)) > 0) {
            // 取出竹筒中的水滴
            System.out.print(new String(bbuf,0,hasRead));
        }

        // 关闭文件输入流
        fis.close();
    }
}

package ch15;

import java.io.*;

/**
 * Created by Jiqing on 2016/12/28.
 */
public class FileReaderTest {
    public static void main(String[] args) throws IOException {
        File file = new File(".");
        try(
            // 创建字符输入流,输入到内存
            FileReader fr = new FileReader(file.getAbsoluteFile().getParent()+"/src/ch15/FileReaderTest.java"))
        {
            // 创建一个长度为32的竹筒
            char[] cbuf = new char[32];
            // 用于保存实际读取的字符数
            int hasRead = 0;
            // 使用循环来重复取水
            while ((hasRead = fr.read(cbuf)) > 0) {
                System.out.print(new String(cbuf,0,hasRead));
            }
        }
        catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}

竹筒的长度只要大于单位长度即可,32表示一次装入的字符数

package ch15;

import java.io.*;

/**
 * Created by Jiqing on 2016/12/28.
 */
public class FileInputStreamTest {
    public static void main(String[] args) throws IOException {
        File file = new File(".");
        // 创建字节输入流
        FileInputStream fis = new FileInputStream(file.getAbsoluteFile().getParent()+"/src/ch15/FileInputStreamTest.java");

        FileOutputStream fos = new FileOutputStream("newFile.txt");

        // 创建一个长度为1024的竹筒
        byte[] bbuf = new byte[128];

        // 保存实际读取的字节数
        int hasRead = 0;

        // 使用循环来重复“取水”
        while ((hasRead = fis.read(bbuf)) > 0) {
            // 取出竹筒中的水滴
//            System.out.println(hasRead);
//            System.out.print(new String(bbuf,0,hasRead));
            fos.write(bbuf,0,hasRead);
        }

        // 关闭文件输入流
        fis.close();
    }
}

package ch15;

import java.io.*;

/**
 * Created by Jiqing on 2016/12/28.
 */
public class FileReaderTest {
    public static void main(String[] args) throws IOException {
        File file = new File(".");
        try(
            // 创建字符输入流,输入到内存
            FileReader fr = new FileReader(file.getAbsoluteFile().getParent()+"/src/ch15/FileReaderTest.java");
            FileWriter fw = new FileWriter("newWriterFile.txt")
        )
        {
            // 创建一个长度为32的竹筒
            char[] cbuf = new char[32];
            // 用于保存实际读取的字符数
            int hasRead = 0;
            // 使用循环来重复取水
            while ((hasRead = fr.read(cbuf)) > 0) {
//                System.out.println(hasRead);
//                System.out.print(new String(cbuf,0,hasRead));
                fw.write(cbuf,0,hasRead);
            }
        }
        catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}

流就是水滴,有意思。输入流,从文件输入到内存。输出流,从内存输出到硬盘。输入,表示读取数据。输出,表示写入数据。



本文转自TBHacker博客园博客,原文链接:http://www.cnblogs.com/jiqing9006/p/6231290.html,如需转载请自行联系原作者

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值