JAVA输入输出流学习笔记

这篇博客详细介绍了Java中的输入输出流,包括字节流和字符流的区别。字节流处理数据的最小单位是字节,而字符流则是以字符(Unicode编码,每个字符2字节)为单位。输入流提供了read()、read(byte[] b)、mark(int readlimit)、reset()、skip(long n)和markSupported()等方法,用于读取和管理数据。输出流则有write(int b)、write(byte[] b)、write(byte[] b, int off, int len)、flush()和close()等方法,用于写入数据和管理缓冲区。" 82154042,7770318,Oracle数据库远程配置与Navicat连接教程,"['Oracle数据库', '数据库配置', '数据库管理', 'Navicat', 'Linux']
摘要由CSDN通过智能技术生成
输入流(Input Stream):程序从输入流读取数据

输入流(Output Stream):程序向输出流写入数据

数据流分类:

1.字节流:数据流中最小的数据单元是字节

2.字符流:数据流中最小的数据单元是字符,(java中的字符是Unicode编码,一个字符占2个字节。)但是字符流只能复制文本文件,字节流可以复制所有文件,包括图片、音乐等。


输入流的一些方法:

read(): 从输入流中读取数据的下一个字节,返回0~255范围内的int字节值。如果已到达流末尾而没有可用的字节,则返回-1;

read(byte[] b):从输入流中读入一定长度的字节,并以整数的形式返回字节数;

mark(int readlimit):在输入流的当前位置放置一个标记,readlimit参数告知此输入流在标记位置失效之前允许读取的字节数;

reset()方法:将输入指针返回到当前所做的标记处;

skip(long n)方法:跳过输入流上的n个字节并返回实际跳过的字节数;

markSupported()方法:如果当前流支持mark()/reset()操作就返回True;

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


输出流的所有方法都返回void,:

write(int b):将指定的字节写入此输出流;

write(byte[] b):将b个字节从指定的byte数组写入此输出流;

write(byte[] b,int off,int len):将指定的byte数组中偏移量off开始的len个字节写入此输出流;

flush():彻底完成输出并清空缓存区;

close():关闭输出流;


一、File类

package com.java.IO;

import java.io.*;

public class FileTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		File file=new File("word.txt");//创建文件对象
		if(file.exists()){//如果该文件存在
			file.delete();//将文件删除
		}
		else{//如果文件不存在
			try {
				file.createNewFile();//创建该文件
				System.out.println("文件已创建");
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
	}
}

获取文件信息的方法:

方法

返回值

说明

getName()

String

获取文件的名称

canRead()

boolean

判断文件是否是可读的

canWrite()

boolean

判断文件是否可被写入

exits()

boolean

判断文件是否存在

length()

long

获取文件的长度(以字节为单位)

getAbsolutePath()

String

获取文件的绝对路径

getParent()

String

获取文件的父路径

isFile()

boolean

判断文件是否存在

isDirectory()

boolean

判断文件是否是一个目录

isHidden()

boolean

判断文件是否是隐藏文件

IsModified()

long

获取文件最后修改时间


二、FileInputStream与FileOutputStream(字节流)
三、FileReader和FileWriter类(字符流)
继承自InputStream类和OutputStream类

package com.java.IO;

import java.io.*;


public class num_1 {
	public static void main(String[] args) throws Exception{
		//字符流
		//FileReader wj=new FileReader("C:/Users/Administrator/workspace/java-1-10/src/com/java/IO/num_1.java");
		//字节流
		FileInputStream wj=new FileInputStream("C:/Users/Administrator/workspace/java-1-10/src/com/java/IO/num_1.java");
		//读取当前文件
		int aa;//这里必须定义成整形,java规定read()函数的返回值是整形
		aa=wj.read();//读取一个字符
		System.out.println("文件内容为:");
		while(aa!=(-1)){//ASCII码是从0开始的数字,只有什么都没有才会返回-1
			System.out.print((char)aa);
			aa=wj.read();
		}
		wj.close();
	}
}

package com.java.IO;

import java.io.*;

public class Fileread {
	public static void main(String[] args) throws Exception {
		FileInputStream fz=new FileInputStream("C:/Users/Administrator/Pictures/微博/1.jpg");//java里路径必须用"/",和windows的路径相反
		FileOutputStream zt=new FileOutputStream("F:/1.jpg");
		int aa;
		aa=fz.read();
		while(aa!=-1){
			zt.write(aa);
			aa=fz.read();
		}
		zt.flush();//将流中残留内同全部输出,卸载文件关闭之前
		fz.close();
		zt.close();
	}
}

四、BufferedInputStream与BufferedOutputStream类(缓冲流)

BufferedReader类常用的方法:
read():读取单个字符
readLie():读取一个文本行,并将其返回为字符串。若无数据可读,则返回null。

BufferedWriter类中的方法都返回void,常用的方法如下:
write(String s,int off,int len):写入字符串的某一部分;
flush():刷新该流的缓存;
newLine():写入一个行分隔符;

在使用BufferWriter类的Write()方法时,数据并没有立即被写入至输出流,而是首先进入 缓存区中。如果想立刻将缓存区中的数据写入输出流,一定要flush()方法。

package com.java.IO;

import java.io.*;

public class Buffered {
	public static void main(String[] args) throws Exception {
		BufferedInputStream hcfz=new BufferedInputStream(new FileInputStream("F:/大.txt"));
		BufferedOutputStream hczt=new BufferedOutputStream(new FileOutputStream("F:/xiao.txt"));
		byte[] hc=new byte[2048];//数字就是缓冲区大小,单位是字节
		int ff;
		ff=hcfz.read(hc);
		while(ff!=-1){
			hczt.write(hc,0,ff);//为了防止最后一次写入数据长度与缓冲区不同
			ff=hcfz.read(hc);
		}
		hczt.flush();
		hczt.close();
		hcfz.close();
		//通过帮助文档,学习使用缓冲字符流,用于拷贝比较大的文本;
	}
	
}

五、转换流、空字符串

package com.java.IO;

import java.io.*;


public class zhuanhuan {
	public static void main(String[] args) {
		String zfc=null;
		try {
			BufferedReader zhl=new BufferedReader(new InputStreamReader(System.in));
			//这个类就是一个包装类,它可以包装字符流,将字符流放入缓存中,先把字符读到缓存里,缓存满了或者flush时,再读入内存
			zfc=zhl.readLine();
			System.out.println("字符串是: "+zfc);
		} catch (Exception e) {
			// TODO: handle exception
		}
	}//system.in是字节流,想要转换成字符流就得用上面的方法
}//转换流是将java不允许的情况变成可能


package com.java.IO;

import java.io.*;
public class kongString {
	public static void main(String[] args) throws Exception {
		String zfc="111111111";
		System.out.println("字符串是:"+zfc);
		
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		zfc=br.readLine();//如果直接输入回车的话,字符串就是一个空字符串,开辟了空间,其值为空
		
		System.out.println("-----------------");
		System.out.println(zfc+"aaaaaa");
		System.out.println(zfc.equals(""));
		System.out.println(zfc.equals(null));
	}
}


六、数据流
数据输入输出流(DataInputStream类与DataOutputStream类) 允许应用程序以与机器无关的方式从底层输入流中读取基本java数据类型,也就是说,当读取一个数据时,不必再关心这个数值应当是哪种字节。

package com.java.IO;

import java.io.*;

public class Data {
	public static void main(String[] args) throws Exception {
		DataOutputStream sjl=new DataOutputStream(new FileOutputStream("f:/大.txt"));
		sjl.writeLong(12345);
		sjl.close();
		
		System.out.println(12345);
		System.out.printf("%#x\n",12345);//转换成16进制
		
		//PrintStream pl=new PrintStream(new FileOutputStream("f:/大.txt"));
		//pl.print(12345);
		//pl.close();
	}

}//DataOutputStream中的writeLong(data)方法的结果是计算机识别的二进制形式
//PrintStream中的println(data)方法的结果是以人们习惯看到的字符串形式

七、print流

package com.java.IO;

import java.io.*;
import java.util.*;

public class Print {
	public static void main(String[] args) {
		PrintStream plzq=null;
		PrintStream plcw=null;
		Scanner ss=null;
		try {//try要从创建流对象开始一直到最后
			plzq=new PrintStream("f:/大.txt");
			plcw=new PrintStream("f:/小.txt");
			ss=new Scanner(System.in);
			int shuzi;
			System.setOut(plzq);//是输出到什么位置
			System.setErr(plcw);//专门用来输出错误的
			
			while(true){
				shuzi=ss.nextInt();
				System.out.println(shuzi);
			}
			
		} catch (Exception e) {
			// TODO: handle exception
		}
	}
}

八、Objec流

package com.java.IO;

import java.io.*;

public class Object {
	
	 static class Student implements Serializable{//接口是空的,起到的是标志作用
		String xingming=null;
		int xuehao=0;
		transient float chengji=0;//transient的作用是忽略,外面传不进来数据
		
		public Student(String xingming,int xuehao,float chengji){
			this.xingming=xingming;
			this.xuehao=xuehao;
			this.chengji=chengji;
		}
	}
	
	public static void main(String[] args) {
		ObjectOutputStream osc=null;
		ObjectInputStream osr=null;
		Student ss=new Student("悟空",007,95.5f);
		Student ss2=null;
		
		try {
			FileOutputStream wsc=new FileOutputStream("f:/大.txt");
			osc=new ObjectOutputStream(wsc);
			osc.writeObject(ss);
			
			osr=new ObjectInputStream(new FileInputStream("f:/大.txt"));
			ss2=(Student)osr.readObject();
			//readObject()方法就是用于读取数据,并且要进行类型转换
			System.out.println("姓名:"+ss2.xingming);
			System.out.println("学号: "+ss2.xuehao);
			System.out.println("成绩:"+ss2.chengji);
			
		} catch (Exception e) {
			// TODO: handle exception
			System.out.println("出现错误");
		}
		finally {
			try {
				osc.close();
				osr.close();
				System.exit(-1);
			} catch (Exception e2) {
				// TODO: handle exception
			}
		}
		
	}
}






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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值