Java SE 学习笔记12 IO流与文件读写

文件读写

Java中通过流来读写文件,流是指一连串流动的字符,是以先进先出方式发送信息的通道。
在这里插入图片描述
输入/输出流与数据源:
在这里插入图片描述
Java流的分类:
在这里插入图片描述
输入输出流是相对于计算机内存来说的。
在这里插入图片描述

1、字节流与字符流的区别

字符流的底层就是字节流。而字符流主要是读取文本文件内容的,可以一个字符一个字符的读取,也可以一行一行的读取文本文件内容,而字节流读取单位为byte。byte作为计算机存储最基本单位,可以用字节流来读取很多其他格式的文件,比如图片视频等等。基于B/S和C/S的文件传输都可以采用字节流的形式。在读写文件需要对内容按行处理,比如比较特定字符,处理某一行数据的时候一般会选择字符流。只是读写文件,和文件内容无关的,一般选择字节流。

字节流就是按照字节来进行传输,字符流是按照字符来传输.最基本的是字节流,字符流可以说是对字节流的一个包装流,比如你知道了一个字符是8个字节,那么你让字节流一次传输8个字节,那不就相当于一次传输一个字符,也就是字符流了。
在这里插入图片描述


使用字节流不关闭执行:

package com.zy.demo2;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class StreamTest {
	// 通过字节流 写文件
    	public static void ByteWrite() {
        	File file = new File("d:\\test.txt");
        	try {
            		OutputStream outputStream = new FileOutputStream(file);
            		String textString = "Hello World!!!";
            		byte[] data = textString.getBytes();
            		outputStream.write(data);
            		//outputStream.close();
        	} catch (IOException e) {
           		 System.out.println("字节流写入文件出错。");
           	 	 e.printStackTrace();
           	 }
        }
        public static void main(String[] args) {
  		StreamTest.ByteWrite();
  	}
  }

结果:
在这里插入图片描述


程序运行后会发现文件中没有任何内容,这是因为字符流操作时使用了缓冲区,而 在关闭字符流时会强制性地将缓冲区中的内容进行输出,但是如果程序没有关闭,则缓冲区中的内容是无法输出的,所以得出结论:字符流使用了缓冲区,而字节流没有使用缓冲区。
在开发中是使用字节流好还是字符流好呢?
回答:使用字节流更好。所有的文件在硬盘或在传输时都是以字节的方式进行的,包括图片等都是按字节的方式存储的,而字符是只有在内存中才会形成,所以在开发中,字节流使用较为广泛。
如果要java程序实现一个拷贝功能,应该选用字节流进行操作(可能拷贝的是图片),并且采用边读边写的方式(节省内存)。

2、使用FileInputStream读取文本文件

package com.zy.demo2;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
public class d {
	/**
  	 * 文件读取(一行一行读)
  	 */
  	 public static void readFile(){
  	File file=new File("D:/test.txt");
     	try {
       		InputStreamReader read = new InputStreamReader(new FileInputStream(file), "utf8");
       		BufferedReader bufferedReader = new BufferedReader(read);
       		String lineTxt = null;
       		//循环输出每一行内容
       		while ((lineTxt = bufferedReader.readLine()) != null) {
         	System.out.println(lineTxt);
       	}
       	read.close();
     } catch (Exception e) {
       		e.printStackTrace();
     	}
 }
 	public static void main(String[] args) {
  		d.readFile();
 	}
 }

结果:
在这里插入图片描述

3、File类

File 类的常用方法如下:

方法名称说明
boolean exists( )判断文件或目录是否存在
boolean isFile( )判断是否是文件
boolean isDirectory( )判断是否是目录
String getPath( )返回此对象表示的文件的相对路径名
String getAbsolutePath( )返回此对象表示的文件的绝对路径名
String getName( )返回此对象表示的文件或目录的名称
boolean delete( )删除此对象指定的文件或目录
boolean createNewFile( )创建名称的空文件,不创建文件夹
long length()返回文件的长度,单位为字节, 如果文件不存在,则返回 0L
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值