java基础—java的Io操作学习(2)[通俗易懂]

学习java的Io操作(2)

大家好,又见面了,我是全栈君。

学习java的Io操作(2),往文件中写入内容,读取文件中的内容!

package com.dufy.io;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.Writer;

/**
 * 
 * 练习IO操作 second <br/>
 * 代码是写出来的,不是看出来的,我是阿飞-aflyun <br/>
 * 在路上! 
 * @author aflyun
 * @email 742981086@qq.com
 *
 */
public class TestSecondIo {
	
	public static void main(String[] args) throws IOException {
		writeByteFile();//字节流写文件
		readByteFile();//字节流读文件
		changeReadByteFile();//修改字节流读文件
		
		writeStringFile();//字符流写文件
		readStringFile();//字符流写文件
	}
	/**
	 * 字节流
	 * 1:向文件中写入字符串
	 * 2:向文件中一个字节一个字节的写入字符串
	 * 3:向文件中追加新内容
	 * @throws IOException 
	 */
	public static void writeByteFile() throws IOException{
		String path = "E:"+ File.separator +"aflyun.txt";
		File file = new File(path);
		OutputStream os = new FileOutputStream(file);
		String str = "Hello World!";
		byte[] b = str.getBytes();
		//1:向文件中写入字符串
		os.write(b);
		//2:向文件中一个字节一个字节的写入字符串
		for (int i = 0; i < b.length; i++) {
			os.write(b[i]);
		}
		//3:向文件中追加新内容
		String appendStr = "\nI am aflyun!"; // \n 表示换行
		byte[] b1 = appendStr.getBytes();
		os.write(b1);//输出 Hello World! I am aflyun!
		os.flush();
		os.close();
	}
	/**
	 * 字节流
	 * 1:读取内容
	 * @throws IOException
	 */
	public static void readByteFile() throws IOException{
		String path = "E:"+ File.separator +"aflyun.txt";
		File file = new File(path);
		InputStream is = new FileInputStream(file);
		byte b[] = new byte[1024]; //设置最多存1024个字节
		int len = is.read(b);
		is.close();
		System.out.println(new String(b));
		System.out.println("文件读入长度: " + len);
	}
	/**
	 * 修改上面那种方式
	 * 字节流
	 * 上面那种方式	预先申请了一个指定大小的空间,但是有时候这个空间可能太小,有时候可能太大,我们需要准确的大小,这样子可以更好的利用空间
	 * @throws IOException
	 */
	public static void 	changeReadByteFile() throws IOException{
		String path = "E:"+ File.separator +"aflyun.txt";
		File file = new File(path);
		InputStream is = new FileInputStream(file);
		byte b[] = new byte[(int) file.length()]; //设置读取的该文件的长度,这样子可以很好的设置使用的空间
		//附1:一个字节一个字节的读
		/*for (int i = 0; i < b.length; i++) {
			b[i] = (byte) is.read();
		}*/
		//附2:判断文件是否读完
		int tmp = 0;
		int count = 0;
		while((tmp = is.read())!= -1){
			b[count++] = (byte) tmp;
		}
		is.close();
		System.out.println(new String(b));
		System.out.println(count);
	
	}
	/**
	 * 字符流
	 * 文件写人字符数据
	 * @throws IOException
	 */
	public static void 	writeStringFile() throws IOException{
		String path = "E:"+ File.separator +"aflyunGood.txt";
		File file = new File(path);
		Writer out = new FileWriter(file);
		String str = "你好,依依!";
		out.write(str);
		out.close();
	}
	/**
	 * 字符流
	 * 文件读出
	 * @throws IOException 
	 */
	public static void readStringFile() throws IOException{
		String path = "E:"+ File.separator +"aflyunGood.txt";
		File file = new File(path);
		BufferedReader bf = new BufferedReader(new FileReader(file));
		String str = "";
		while((str = bf.readLine()) != null){ //按行读
			System.out.println(str);
		}
		bf.close();
	}
	
	/**
	 * 总结 字节流和字符流的区别
	 * 	字节流在操作的时候本身是不会用到缓冲区的,是文件本身的直接操作的,但是字符流在操作的 时候下后是会用到缓冲区的,是通过缓冲区来操作文件的。
	 * 	试着将上面的字节流和字符流的程序的最后一行关闭文件的代码注释掉,然后运行程序看看。你就会发现使用字节流的话,文件中已经存在内容,但是使用字符流的时候,文件中还是没有内容的,这个时候就要刷新缓冲区。
	 * 	那到底那个好一些呢?
	 * 	答案是字节流。首先因为硬盘上的所有文件都是以字节的形式进行传输或者保存的,包括图片等内容。但是字符只是在内存中才会形成的,所以在开发中,字节流使用广泛。
	 */
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/121268.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • cloudsim仿真_虚拟机cpu怎么分配

    cloudsim仿真_虚拟机cpu怎么分配CloudSim源码分析之虚拟机分配分类: 云计算 CloudSim2011-05-1514:32 1629人阅读 评论(10) 收藏 举报虚拟机integerlistnulltableobject 原文出处:虚拟机分配指的是,选择满足特定条件(内存、软件环境配置等)的主机创建虚拟机的过程,这个过程由Datacenter对象负责。VmAllocationPolicy这

    2022年10月13日
  • 解决主页被 hao.360.cn 劫持 及 分析[通俗易懂]

    解决主页被 hao.360.cn 劫持 及 分析[通俗易懂]解决主页被hao.360.cn劫持及分析 解决办法:1.删除注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Mslmedia2.重启3.删除驱动C:\WINDOWS\system32\DRIVERS\Mslmedia.sys搞定现象:打开任何浏览器,主页被hao.360.cn劫持。跳

    2022年7月26日
  • Tomcat频繁宕机的原因分析「建议收藏」

    Tomcat频繁宕机的原因分析「建议收藏」资源!没有完全释放,用完后要父NULL值;数据库连接顺序关闭;优化JAVA虚拟机加入相应的内存参数;TOMCAT在LINUX下不是很稳定;String类型使用,不符合规范;不要在数据库中获取大段文本;JAVA不推荐用String获取大量信息,造成内存溢出就是它;

    2022年7月23日
  • listagg oracle10_HLOOKUP函数

    listagg oracle10_HLOOKUP函数LISTAGG函数介绍listagg函数是Oracle11.2推出的新特性。其主要功能类似于wmsys.wm_concat函数,即将数据分组后,把指定列的数据再通过指定符号合并。LISTAGG使用listagg函数有两个参数: 1、要合并的列名 2、自定义连接符号☆LISTAGG函数既是分析函数,也是聚合函数所以,它有两种用法: 1、分析函数…

    2022年9月7日
  • 虚拟机与宿主机网络[通俗易懂]

    虚拟机与宿主机网络[通俗易懂]桥接、NAT和host-only三种网络连接方式的区别一、不同网络连接方式对网络网络影响简介:二、三种网络连接方式详细介绍:我本机宿主机使用win10系统,IP地址为:192.168.1.117。1、桥接方式桥接方式下,虚拟机和宿主机处于同一网段,真实存在于网络中,像是一台真实的主机。虚拟机和宿主机彼此互通,且网络中的其他主机也可以互通。就像是连接在hub中的主机一样。获取的IP地址网段为:192.168.1.X,实际获取的为192.168.1.220。优点:可以轻松实现上网,同网段中的主机

    2022年8月21日
  • 地表最强app官网ios_地表最强app下载

    地表最强app官网ios_地表最强app下载1.全历史当你村里的二大爷,国外回来的Uncle刘想要和你交流交流历史时,没关系,查看这个App。从生命起源到现代文明,从东亚到北美洲,从政权到经济,从军事到民生,保证让你上知天文,下知地理,聊得你二大爷也很蒙圈。2.Canva朋友相聚怎么少的了拍照发朋友圈!Canva提供朋友圈拍照模板以及各种特效,可爱的,青春的,春节气氛的,统统都有。万一结个婚呢,还可以在上面做贺卡。3.美丽修行…

    2022年8月22日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号