字节流,什么是字符流

奋死学习Java 26天前 ⋅ 168 阅读

什么是字节流,什么是字符流:

字节流就是以字节的方式输入输出【byte】;而字符流是以字符的形式进行输入输出【String】。

两者有什么区别:

两者的使用方式大致相同,但是字节流在操作时本身不会使用到缓冲区,而字符流会使用到缓冲区。

在操作时字符流和字节流使用完成时都不会主动关闭,那么就会产生一个问题,当使用字节流时不关闭流,当运行程序打开文件时,文件里存在了你输入的内容。

而用字符流时不关闭流,打开文件时里面就是空的。因为字符流会使用到缓冲区,不关闭流,缓冲区就不会将字符写入文件。

如果想在不关闭时也可以将字符流的内容全部输出,则可以使用Writer类中的flush()方法完成。

 

从字节流转化为字符流时间上就是从byte[]转换成string

try{ }:最后结果是,文本里面也是照样保存了

这个try(){}catch{},try后面()会自动释放资源的,所以说表面是没有关闭,其实是关闭流了,这个jdk1,7的新特性,叫自动资源管理

 

这四个是抽象类,不能new对象。

 

这是关于创建字节流的使用方法:

import java.io.FileInputStream;
import java.io.FileOutputStream;


public class Test1 {
	public static void main(String[] args) {
		Test1.testFileInputStream();
		Test1.testFileoutputStream();
	}
	public static void testFileInputStream() {
		try {
			FileInputStream in = new FileInputStream("D:/test1/tt.txt");//指向tt4的输入数据
			
			byte[] b = new byte[100];//设置一个字节数组接受读取文件的内容
			int len = 0;//设置一个读取数据的长度
			//in.read(b);他有个返回值 这个返回值是读取数据的长度 如果读取完成了读取到最后一个数据然后还会向后读一个这个时候返回值就是-1
			//也就意味着当这个返回值为-1时 整个文件就读取完了
			
			while((len = in.read(b)) != -1){
				System.out.println(new String(b,0,len));
				//在b里从0 读取到len长度,b是缓冲数据的数组,0是从数组的第0个位置开始,转换len个字节
			}
			System.out.println(new String(b));
			in.close();//流使用完一定要关闭
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	public static void testFileoutputStream() {
		try {
			FileOutputStream out = new FileOutputStream("D:/test1/tt4.txt");//指定向tt4输出数据
			String str = "kdjfshkghkjk";
			out.write(str.getBytes());//把字符串str以字节的形式写入
			out.flush();//把这个数据刷写到硬盘
			out.close();
		} catch (Exception e) {
	
			e.printStackTrace();
		}
	}
}

复制TXT文本到另一个文件夹下:

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;


public class Test2 {
	public static void main(String[] args) {
		Test2.copyFile();
	}
	public static void copyFile() {
		try {
			FileInputStream in = new FileInputStream("D:/test1/tt4.txt");
			FileOutputStream out = new FileOutputStream("D:/test1/test/tt4.txt");//指定向tt4输出数据
			byte[] b = new byte[100];
			int len = 0;
			while((len = in.read(b)) != -1){
				out.write(b,0,len);//参数1是写的缓冲数组,参数2是从数组的那个位置开始,参数3是获取的总长度
			}
			
			out.flush();//把写到内存的数据刷到硬盘
			out.close();
			in.close();
		} catch (Exception e) {
 
			e.printStackTrace();
		}
	}
}

File类

Java.io.file类:文件和目录路径名的抽象表示形式,与平台无关

File能新建、删除、重命名文件和目录,但不能访问文件内容本身。如果需要访问文件内容本身,则需要使用输入/输出流,就是上面写到的那些。

File对象可以作为参数传递给流的构造函数

File类的常见构造方法:

public File(String pathname)

pathname为路径创建File对象,可以是相对路径也可以是绝对路径,如果是相对路径,那么则默认的当前路径在系统属性user.dir中存储

public File(String parent,String child)

以parent为父路径,child为子路径创建File对象

File的静态属性String Separator存储了当前系统的路径分隔符。

写路径的分隔符有两种:'/'  和  '\\'

关于file的方法:

 

 

 

全部评论: 0

    我有话说: