Java从零开始学三十五(JAVA IO- 字节流)
一、字节流
FileOutputStream是OutputStream 的直接子类
FileInputStream也是InputStream的直接子类
二、文本文件的读写
2.1、字节输入流
Test.txt文件内容
abcdefg
package com.pb.io; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; /* * FileInputStreamDemo读取文件 */ public class FileInputStreamDemo1 { public static void main(String[] args) { //1.声明文件对象,也可以跳过此步直接在第2步中写 File f=new File("d:"+File.separator+"test"+File.separator+"test.txt"); //FileInputStream fis=new FileInputStream("d:/test/hello.txt"); try { //2.创建FileInputStream对象并将file对象传入 FileInputStream fis=new FileInputStream(f); //3.定义整型变量用来存放内容 int date; //4先查看文件可以读取的字节类available()方法获取文件的字节数 System.out.println("可读取的字节数:"+fis.available()); System.out.println("=========开始读取文件=========="); //5读取文件read()方法 System.out.println("========没有转换前输出======="); while((date=fis.read())!=-1){ //!=-1说明文件还有内容=-1时,就说明文件内容读完结束 System.out.println(date+"\t"); } System.out.println("=======文件读取结束========="); //关闭流 fis.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
结果:
可读取的字节数:7 =========开始读取文件========== ========没有转换前输出======= 97 98 99 100 101 102 103 =======文件读取结束=========
结果:并不是文件中的内容
修改上面的文件:
package com.pb.io; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; /* * FileInputStreamDemo读取文件 */ public class FileInputStreamDemo1 { public static void main(String[] args) { //1.声明文件对象,也可以跳过此步直接在第2步中写 File f=new File("d:"+File.separator+"test"+File.separator+"test.txt"); //FileInputStream fis=new FileInputStream("d:/test/hello.txt"); try { //2.创建FileInputStream对象并将file对象传入 FileInputStream fis=new FileInputStream(f); //3.定义整型变量用来存放内容 int date; //4先查看文件可以读取的字节类available()方法获取文件的字节数 System.out.println("可读取的字节数:"+fis.available()); System.out.println("=========开始读取文件=========="); //5读取文件read()方法 System.out.println("========转换后转出======="); while((date=fis.read())!=-1){ //!=-1说明文件还有内容=-1时,就说明文件内容读完结束 char c=(char)date; System.out.println(c+"\t"); } System.out.println("=======文件读取结束========="); //6.关闭流 fis.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
结果:
可读取的字节数:7
=========开始读取文件==========
========转换后转出=======
a
b
c
d
e
f
g
=======文件读取结束=========
小结:FileInputStream
1.read()读取内容,是返回int值
2.需要转换字符
3.read()方法是单程的,
4.一定要关闭流
2.2、字节输出流
package com.pb.io; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.Scanner; public class FileOutputStreamDemo1 { public static void main(String[] args) { try { //1.实例化FileOutputStream对象,在文件的末尾追加内容 FileOutputStream fos=new FileOutputStream("d:/test/test.txt",true); //2.创建他写入的字符串 Scanner input=new Scanner(System.in); System.out.println("请输入要写入文件的内容:"); String str=input.next(); //3.将内容转换为字节数组 byte[] bytes=str.getBytes(); //4.将内容写入 fos.write(bytes,0,bytes.length); //3个参数的方法,从0开始到数组结束的全部写入 System.out.println("文件写入结束!"); //5.关闭流 fos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
结果:
请输入要写入文件的内容:输入e结束 好好学习,天天向上 hello java! 文件写入结束!
test.txt
abcdefg好好学习,天天向上
在进行写操作时,如果文件不存在,将自动创建这个文件,如果上面没test.txt,将会自动创建这个文件,可以试下,将文件删除再运行
三、综合使用
package pb.io.file; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.Scanner; /** * 拷贝文件 * @author 北大青鸟 * */ public class CopyFile { public static void main(String[] args) { Scanner input=new Scanner(System.in); int date=0; System.out.print("请输入您要拷贝的源文件:"); String file1=input.next(); System.out.print("请输入您要拷贝的目标位置:"); String file2=input.next(); try { FileInputStream fis = new FileInputStream(file1); FileOutputStream fos = new FileOutputStream(file2); while((date=fis.read())!=-1){//读取文件 char c=(char)date;
fos.write(c); } fis.close(); fos.close(); System.out.println("拷贝成功!"); } catch (FileNotFoundException e) { System.out.println("源文件未找到!"); } catch (IOException ex) { System.out.println(ex.toString()); } } }