Io_2(FileInputSStream or FileOutputStrem)

这两个字节派生类 主要针对于文件操作:

 FileOutputStream:

    //往文件中写入一个数据

public static void main(String[] args) {
		try {
			FileOutputStream file = new FileOutputStream("D://a.txt");//会出现编译时异常,必须现在处理
			//如果a.txt不存在 则会被创建,如果存在 ,则不创建
			/*
			 * 创建字节输出流对象做了几件事情:
			 * 		A:调用系统功能去创建文件
			 * 		B:创建file对象
			 * 		C:把file对象指向这个文件
			 */
			String s="你好我是";
			//方法用byte 写入 所以将文字先转成byte
			byte [] b = s.getBytes();
			file.write(b);
			file.close();
			//一定要close()
			//1,释放资源,让流对象变成垃圾,这样就可以被垃圾回收了
			//通知系统,这个变成垃圾了,然后释放与该文件相关的资源
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

FileOutputStream 三个写入方法:

 

public static void test2(){
			FileOutputStream fileOut;
			try {
				fileOut = new FileOutputStream("D:/a.txt");
				//第一中
				fileOut.write(97);//系统会根据编码表自动转查找成字符 a
				//第二种
				byte b =97;
				fileOut.write(b);//系统会根据编码表自动转查找成字符 a
				//第三种
				byte []  b1 ={12,123,34};
				fileOut.write(b1);//系统会根据编码表自动转查找成字符 a
				//第四种 Byte数组 隔断写
				byte []  b2 ={12,123,34};
				fileOut.write(b2,1,2);//系统会根据编码表自动转查找成字符 a
			} catch (FileNotFoundException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
	}

文本换行:

public static void test4(){
		try {
			FileOutputStream file4 = new FileOutputStream("D:/a.txt");
			//开始写数据
			/*
			 * windows : \r\n
			 * linux:\n
			 * mac:\r
			 * 而一些高级文本软件 都可以识别
			 */
			for(int i=0;i<10;i++){
				file4.write(("hello world"+i).getBytes());
				file4.write("\r\n".getBytes());
			}
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
	}

追加

只要是FileOutputStream 的构造方法里面有 boolean 这个参数的构造方法,写成 true 就可以追加

FileOutputStream file4 = new FileOutputStream("D:/a.txt",true);//加入一个true  这个文件可以追加

public static void test4(){
		FileOutputStream file4=null;
		try {
			 file4 = new FileOutputStream("D:/a.txt",false);
			//开始写数据
			/*
			 * windows : \r\n
			 * linux:\n
			 * mac:\r
			 * 而一些高级文本软件 都可以识别
			 */
			for(int i=0;i<10;i++){
				file4.write(("hello world"+i).getBytes());
				file4.write("\r\n".getBytes());
			}
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			//如果file4不为空再进行close();
			if(file4!=null){
				try {
					file4.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
		
		
	}

FileInputStream 

    

        读取英文或者符号没有问题的代码(中文不行)

    

public static void test5(){
		try {
			FileInputStream fileInt = new FileInputStream("D:/a.txt");
			int x=0;
			while((x=fileInt.read())!=-1){
				System.out.print((char)x);
			}
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

字节流读取汉字:

            计算机是如何识别该把两个字节转换为一个中文的?

             在计算机中中文的存储分为两个字节:

                        --第一个绝对是负数。

                        --第二个常见的是负数,可能有正数,但是没影响的。

简单的复制文件(可复制 图片 视频):

//复制文件
	public static void test6() throws IOException{
		FileInputStream fileInt=null;
		FileOutputStream fileOout=null;
		try {
			//创建流指向对象
			 fileInt = new FileInputStream("D:/a.txt");
			//创建流指向要存储的文件
			 fileOout = new FileOutputStream("D:/b.txt");
			int index =0;
			while((index=fileInt.read())!=-1){
				fileOout.write(index);
			}
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			fileInt.close();
			fileOout.close();
		}
		
	}

上面方法读取效率比较低:

    --用第二种方法: read(Byte [] b) //一定要注意  这个读取必须要有终点

 fileInt = new FileInputStream("D:/a.txt");
		
			 byte[] b = new byte[1024]; //一次读多少由这个决定
			int index =0;
			while((index=fileInt.read(b))!=-1){
				System.out.println(new String(b,0,index));//读了多少个就转换多少出来
			}
 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值