java高级——IO流 File 字节流 字符流 管道流和节点流 打印流 内存流 对象序列化

File
获取文件或文件夹信息,该文件可以不存在
获取一个文件的最后修改时间,精确到时分秒:

File f=new File("D:\\jiu.txt");
Date d=new Date(f.lastModified());
DateFormat df=new SimpleDateFormat("yyyy年MM月dd日 HH小时mm分钟ss秒");
String format3 = df.format(d);
System.out.println(format3);

createNewFile() 创建文件 如果是多级目录,目录一定要先存在
mkdir() 创建目录,只能创建一级目录
mkdirs() 创建多级目录

FileSystemView获取桌面

FileSystemView fsv = FileSystemView.getFileSystemView();
		File[] roots = fsv.getRoots();
		for(int i=0;i<roots.length;i++)
		{
			System.out.println(fsv.getSystemDisplayName(roots[i]));
		}

listRoots获取系统根路径

File[] listRoots = File.listRoots();
		for(int i=0;i<listRoots.length;i++)
		{
			System.out.println(listRoots[i]);
		}

快捷键

CTRL+SHIFT+R 查找当前项目中的资源
CTRL+SHIFT+T 查看当前项目以及JRE+第三方的jar包下所有的资源
CTRL+SHIFT+F 格式化
CTRL+1 提供解决方案 告诉你下一步该怎么做
CTRL+T 查看类的族谱

字节流 Byte
输入流 InputStream 将硬盘的文件读到内存的进程中
输出流 outputStream 将内存中数据写入到硬盘的某个文件中

每一个汉字 都有对应的一个编码
GBK 常用汉字
GB2312 所有汉字 是GBK的扩充
UTF-8 万国码 默认的编码格式
不同的文字要用不同的编码去解析它

in.read方法,每一次从上次结束的位置开始读取,当读到末尾时
返回-1,如果读到末尾了还调用此方法,读到的还是上一次读到的数据
FileInputStream方法不支持重置操作。

OutputStream创建文件:

String txt="helloworld";
		OutputStream out=new FileOutputStream(new File("D:\\hello.txt"));
		out.write(txt.getBytes());

如果需要追加内容,有两种方法
方法1:
在后面加true

String txt="helloworld";
		OutputStream out=new FileOutputStream(new File("D:\\hello.txt"),true);
		out.write(txt.getBytes());

方法2:
追加多次

String txt="helloworld";
		OutputStream out=new FileOutputStream(new File("D:\\hello.txt"));
		out.write(txt.getBytes());
		out.write(txt.getBytes());
		out.write(txt.getBytes());

字节流
inputStream
outputStream
字符流
read
write
1.字节流和字节流之间的区别
A.字节流可以处理多媒体数据 但是字符流无法处理多媒体数据。
B.多媒体 图片 音频 视频 不要使用字符流
C.字符流的优势在于处理文字

2.close()和flush()的区别?

close()关闭流对象,但是先刷新一次缓冲区,关闭之后,流对象不可以继续再使用了。

flush()仅仅是刷新缓冲区(一般写字符时要用,因为字符是先进入的缓冲区),流对象还可以继续使用
对于字符流 一般写入的时候想要马上看到一般需要flush()
字符一定要flush,字节是不需要flush的

管道流和节点流
节点流 该流直接对应的是一个文件
InputStream
outputStream
Reader
Writer
管道流对应的是一个节点流 将节点流继续包装 包装之后 会多一些方法
BufferedReader readLine()
append("").append("")
newLine();
BufferedWriter write()
InputStreamReader 转换流 将字节流转换为字符流

InputStream in=new FileInputStream("D:\\tt.txt");
//		把字节流转换为字符流
	    InputStreamReader reader=new InputStreamReader(in);
//	            在BufferedReader中包装一个InputStreamReader
//	            就可以用管道流中的readLine()方法
	    BufferedReader bf=new BufferedReader(reader);
//	            读取一行
	    System.out.println(bf.readLine());;
//	            读取全部
	    String line=null;
	    while((line=bf.readLine())!=null)
	    {
	    	System.out.println(line);
	    }

OutputStreamWriter 转换 将字节流转换为字符流

打印流
printStream 字节打印流 即是节点流,又是管道流

//打印到控制台
PrintStream ps=new PrintStream(System.out);
ps.print("helloworld");
//输出到文件中
PrintStream ps2=new PrintStream(new File("D:\\ss.txt"));
ps2.println("世界真美丽");

格式化数据

ps2.println(MessageFormat.format("{0}是一个很{1}的人","张三","挫"));

printWirter 字符打印流

PrintWriter pw=new PrintWriter(System.out);
pw.println("世界你好");
pw.flush();

内存流
在内存中开辟一块空间 临时的空间 不常用
字节内存流 toByteArray()

//分配一块空间
String s="helloworld";
//读取空间里面的内容
ByteArrayInputStream in=new ByteArrayInputStream(s.getBytes());
int b=0;
while((b=in.read())!=-1)
{
	System.out.println(b);
}

//在创建输出流的时候 给你分配一个块 1024个字节
 ByteArrayOutputStream out=new ByteArrayOutputStream(1024);
    	String ss="111111";
    	out.write(ss.getBytes(),0,ss.length());
    	//将这个空间的数据全部拿出来
    	byte[] bb=out.toByteArray();
    	System.out.println(new String(bb));

字符内存流
一般用于servlet 自定义标签 toCharArray();

CharArrayWriter writer=new CharArrayWriter(1024);
		String s="222222";
		writer.write(s,0,s.length());
		char[] c = writer.toCharArray();
	    System.out.println(c);

总结:
把一个文件打印和读出:

Person p=new Person(1,"小红",'女');
		PrintStream ps=new PrintStream(new File("D:\\person.txt"));
	    ps.print(p);
	    BufferedReader reader=new BufferedReader(new FileReader(new File("D:\\person.txt")));
	    String readLine = reader.readLine();
	    System.out.println(readLine);

对象序列化
序列化流 对象想要在文件和网络中传输 必须实现序列化接口
将一个对象保存到文件中 前提是可以拿出来还是一样
ObjectInputStream类
要把对象的原始信息和图形保存到文件中 一定要实现序列化接口

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值