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

一、File类

1、访问文件和目录

packagecom;importjava.io.File;importjava.io.IOException;public classFile1 {public static void main(String[] args) throwsIOException {//以当前路径来创建一个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)方法,是一个函数式接口。

importjava.io.File;public classFilenameFilterTest {public static voidmain(String[] args) {

File file= new File(".");//如果文件以.java结尾或文件对应一个目录,返回true

String[] nameList = file.list((dir,name) -> name.endsWith(".java") || newFile(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中

importjava.io.FileInputStream;importjava.io.IOException;public classFileInputStreamTest {public static void main(String[] args) throwsIOException {//创建字节输入流

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流。

importjava.io.FileReader;importjava.io.IOException;public classFileInputStreamTest {public static void main(String[] args) throwsIOException {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的字符输出到输出流中。

实现复制文件的功能:

importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.IOException;public classFileOutputStreamTest {public static voidmain(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();

}

}

}

直接输出字符串内容:

importjava.io.FileWriter;importjava.io.IOException;public classFileWriterTest {public static voidmain(String[] args) {try(FileWriter fw = new FileWriter("aaa3.java"))

{

fw.write("11111111111111\r\n");

fw.write("2222222222\r\n");

}catch(IOException ex){

ex.printStackTrace();

}

}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值