java控制io_Java-IO操作

IO流包括字节流(Byte)和字符流(String/char)

字节流:

在JDK中定义了两个抽象类InputStream和OutputStream,它们是字节流的顶级父亲。

InputStream的常用方法:

int read(),从输入流读取一个8位的字节,把它转换为0~255之间的整数,并返回这一整数。

int read(byte[] b ),从输入流读取若干个字节,把它们保存到参数b指定的字节数组中,返回的整数表示读取字节数。

int read(byte[] b ,int  off,int len),从输入流读取若干个字节,把它们保存到参数b指定的字节数组中,off指定字节数组开始保存数据的起始下标,len表示读取的字节数目。

void close() 关闭此输入流并释放与该流关联的所有系统资源。

OutputStream的常用方法:

void write(),像输出流写入一个8位的字节。

void write(byte[] b ),参数b指定的字节数组的所有字节写到输出流。

void read(byte[] b ,int  off,int len),把参数b指定的字节数组中从off指定开始的len个字节写入输入流。

void flush(),刷新此输出流并强制写出所有缓冲的输出字节。

void close() 关闭此输出流并释放与该流关联的所有系统资源。

FileInputStream

packagestream;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.IOException;importjava.io.InputStream;public classFileInputStreamDemo{public static voidmain(String[] args) {

File srcFile=new File("CopyStreamDemo.txt");try{

InputStream inputStream=newFileInputStream(srcFile);byte[] buffer=new byte[1024];int len=-1;while((len=inputStream.read(buffer))!=-1) {//从输入流inputStream读取若干字节,把它们保存到参数buffer中去,同时判断是否读到文件末尾

String text=new String(buffer,0, len, "utf-8");//将字节数组转换为字符串

System.out.printf(text);

}

inputStream.close();

}catch(FileNotFoundException e) {

e.printStackTrace();

}catch(IOException e) {

e.printStackTrace();

}

}

}

FileOutputStream

1 packagestream;2

3 importjava.io.File;4 importjava.io.FileNotFoundException;5 importjava.io.FileOutputStream;6 importjava.io.IOException;7 importjava.io.OutputStream;8

9 public classFileOutputStreamDemo {10

11 public static voidmain(String[] args) {12 File desfile=new File("target.txt");13 try{14 String text="我的第一个记事本程序\r\n还有第二行";15 OutputStream os=newFileOutputStream(desfile);16 byte[] buffer=text.getBytes("utf-8");//将字符串转换为字节数组17 os.write(buffer);18 System.out.println("文件写入完成!");19 os.close();20 } catch(FileNotFoundException e) {21 e.printStackTrace();22 } catch(IOException e) {23 e.printStackTrace();24 }25 }26 }

此外,注意在IO包中提供的两个带缓冲的字节流,BufferedInputStream和BufferedOutputStream,它们的构造方法中分别接收InputStream和OutputStream类型的参数作为被包装的对象。

1 importjava.io.BufferedInputStream;2 importjava.io.BufferedOutputStream;3 importjava.io.File;4 importjava.io.FileInputStream;5 importjava.io.FileNotFoundException;6 importjava.io.FileOutputStream;7 importjava.io.IOException;8

9 public classFileCopy{10 public static voidmain(String[] args) {11 File srcFile=new File("CopyStreamDemo.txt");12 File desFile=new File("target.java");13 try{14 /**

15 * 带缓冲的字节流,BufferedInputStream和BufferedOutputStream,二者接收InputStream和OutputStream作为参数16 */

17 BufferedInputStream is=new BufferedInputStream(newFileInputStream(srcFile));18 BufferedOutputStream os=new BufferedOutputStream(newFileOutputStream(desFile));19 byte[] buffer=new byte[1024];20 int len=-1;21 System.out.println("正在复制文件,请稍后...");22 while((len=is.read(buffer))!=-1) {23 os.write(buffer,0,len);24 }25 System.out.println("文件复制完成!");26 is.close();27 os.close();28 } catch(FileNotFoundException e) {29 e.printStackTrace();30 } catch(IOException e) {31 e.printStackTrace();32 }33 }34 }

字符流:

字符流也有两个顶级父亲,分别是Reader和Writer,其中Reader是字符输入流,用于从某个源设备读取字符,Writer是字符输出流,用于向某个目标设备写入字符。

其中,FileReader和FileWriter用于读写文件,BufferedReader和BufferedWriter是具有缓冲功能的流,它们可以提高读写效率。

FileReader和FileWriter实现文件读写:

1 packagechars;2

3 importjava.io.File;4 importjava.io.FileNotFoundException;5 importjava.io.FileReader;6 importjava.io.FileWriter;7 importjava.io.IOException;8 importjava.io.Reader;9 importjava.io.Writer;10

11 public classCopyByCharsDemo {12 public static voidmain(String[] args) {13 File srcFile=new File("BufferedReaderDemo.txt");14 File desFile=new File("dest.txt");15 try{16 Reader reader=newFileReader(srcFile);17 Writer writer=newFileWriter(desFile);18 char[] buffer=new char[1024];19 int len=-1;20 while((len=reader.read(buffer))!=-1) {21 writer.write(buffer);22 }23 System.out.println("复制完成!");24 reader.close();25 writer.close();26 } catch(FileNotFoundException e) {27 e.printStackTrace();28 } catch(IOException e) {29 e.printStackTrace();30 }31

32 }33 }

BufferedReader

1 packagechars;2

3 importjava.io.BufferedReader;4 importjava.io.File;5 importjava.io.FileNotFoundException;6 importjava.io.FileReader;7 importjava.io.IOException;8 /**

9 * 文件Reader,BufferedReader同BufferedInputStream一样,内部参数是new FileReader(srcFile)10 *@authorAdministrator11 *12 */

13 public classBufferedReaderDemo {14 public static voidmain(String[] args) {15 File srcFile=new File("CopyByCharsDemo.txt");16 try{17 BufferedReader bReader=new BufferedReader(newFileReader(srcFile));18 String res=null;19 while((res=bReader.readLine())!=null) {//每次读取一行文本,判断是否到文件结尾

20 System.out.println(res);21 }22 bReader.close();23 } catch(FileNotFoundException e) {24 e.printStackTrace();25 } catch(IOException e) {26 e.printStackTrace();27 }28 }29

30 }

总结:

1.文件读取时,不论是用InputStream还是Reader还是BufferedInputStream读取时都用len,while((len=is.read(buffer))!=-1),但是在BufferedReader中,定义一个String res=null,这时的判断条件是 while((res=br.readLine())!=null)

2.文件读写完成后,记得要善后,即is.close()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这是一个关于 JDK 的 Java 选项的提示信息,其中包含了三个参数:--add-opens=java.base/java.lang=all-unnamed、--add-opens=java.base/java.io=all-unnamed 和 --add-opens=java.rmi/sun.rmi.transport=all-unnamed。这些参数的作用是打开一些 Java 模块的访问权限,以便程序能够正常运行。 ### 回答2: 这段话是指在安装Java Development Kit(JDK)时,设置了一些参数,其中包括了三个--add-opens选项。这些选项被用来控制Java模块化系统中的包之间的可访问性,其中--add-opens选项允许将一个包的开放转移到另一个包中,以便在代码中可以访问这些包。 具体来说,这三个选项的作用如下: --add-opens=java.base/java.lang=all-unnamed:允许java.lang包下的所有类可以被所有未命名模块(即没有export声明的模块)访问。 --add-opens=java.base/java.io=all-unnamed:允许java.io包下的所有类可以被所有未命名模块访问。 --add-opens=java.rmi/sun.rmi.transport=all-unnamed:允许sun.rmi.transport包中的所有类在所有未命名模块中被访问,以支持Java远程方法调用。 这些选项都是为了解决Java模块化系统中访问控制的问题而设置的。Java模块化系统将Java SE 9中引入的的重要特性之一,用于管理和组织Java平台的各个组件,更好地支持解耦和重用代码。在这种情况下,控制代码的可见性是必然的。 总结一下,这个命令行参数的目的是允许指定的模块之间进行互操作,从而扩展了Java以支持更加灵活的应用程序。这种输入非常具体化,对Java开发人员来说非常重要,因为他们需要确保代码可以编译和运行,而在Java模块化环境中,不能访问私有的API。 ### 回答3: 这个信息是指在Java开发环境中,通过另一个程序或者脚本获取到的一组JDK参数设置,具体是关于--add-opens选项的设置。这个选项用于打开一些Java模块中的未命名包,以方便开发者在使用Java模块时更加灵活、自由地访问其中各种资源。 具体来说,这个选项设置了三个参数:--add-opens=java.base/java.lang=all-unnamed、--add-opens=java.base/java.io=all-unnamed、--add-opens=java.rmi/sun.rmi.transport=all-unnamed。第一组参数表示将Java基础模块中的java.lang包中所有未命名的资源包全部打开;第二组参数表示将Java基础模块中的java.io包中所有未命名的资源包全部打开;第三组参数则是将Java RMI(远程方法调用)模块中的sun.rmi.transport包中的所有未命名资源包打开。 这个设置的意义主要在于在使用Java开发项目时,尤其是在使用一些第三方库或者框架时,可能会需要访问到一些Java模块中的未命名资源包,例如一些未公开的API、内部实现类等等,而Java默认情况下是不允许访问这些资源包的。通过使用--add-opens选项,开发者可以将这些资源包打开,使得自己可以更加灵活地使用和定制Java环境,提高开发效率和代码可读性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值