Java基础——IO流

Java基础——IO流

  IO核心就是五个类(File,InputStream,OutPutStream,Reader,Writer)+ 一个接口(Serializable)

 一、File类

  File类是java.io包中唯一一个与文件本身操作(创建、删除、取得信息)有关的程序类。
  对文件做操作前,需要先创建一个File类:

		public File(String pathname);
		public File(String parent,String child);

  判断文件是否存在

		public boolean exists();

  删除文件:

		public boolean delete();

  取得父路径或父File对象:

		public String getParent();
		public File getParentFile();

  创建目录(无论有多少级父目录,都会创建)

		public boolean mkdirs();

  举个栗子:

		/** 创建文件前先判断其父目录是否存在,若不存在,则需要先创建父目录,
		   若存在,则再判断当前文件是否已创建。 */
		public static void main(String[] args) {
        File file = new File("C:"+File.separator+"Users"+
        		File.separator+"xiaoaxiao"+File.separator+
        		"Desktop"+File.separator+"com"+File.separator+
        		"xiaoaxiao"+File.separator+"io"+File.separator+
        		"IOTest.java");
        // 若父路径不存在,则先创建父路径
        if(!file.getParentFile().exists()){
            file.getParentFile().mkdirs();
        }
        // 当前文件,存在则删除,不存在则创建
        if(file.exists()){
            file.delete();
        }else {
            try {
                file.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

 二、字节流与字符流的输入输出

  字节流:InputStream,OutputStream
  字符流:Reader,Writer

  字节流和字符流的本质区别是:字节流是原生操作(网络数据传输、磁盘数据保存都是字节),而字符流是经过处理后的操作(先读取到内存再将字节转换为字符)。
  字节流与字符流的操作流程几乎相同:
   1、根据文件路径先创建File对象
   2、根据字节流或字符流的子类实例化父类对象
   3、进行数据的读取或写入操作
   4、关闭流(close())
  InputStream、OutputStream、Reader、Writer都是抽象类,要实例化父类,必须使用子类,以操作文件为例,FileInputStream(File file),FileWriter(File file)。
  操作字节流时:使用一个字节数组(byte[])进行输入输出

		// 输出
		output.writer("hello".getBytes());
		// 输入,read返回数据的读取个数
	(开辟的字节数组>读取到的数据大小?读取到的数据大小:开辟的字节数组大小)
		int len = 0;
		byte[] data = new byte(1024);
		len = input.read(data);

  操作字符流时:可以直接使用字符串进行输出(也可以是字节数组),但只能使用字节数组进行输入(最终将字节数组转换为字符串即可)

		// 输出
		output.writer("hello");
		// 输入,read返回数据的读取个数
	(开辟的字节数组>读取到的数据大小?读取到的数据大小:开辟的字节数组大小)
		// 若文件读取结束,则返回-1
		int len = 0;
		byte[] data = new byte[1024];
		len = input.read(data);
		// 将字节数组转换为字符串
		String msg = new String(data,0,len);

  处理图片、音乐、文字都可以使用字节流;只有处理中文时才会使用字符流。

 三、转换流

  所谓转换流就是将字节输入/出流转换为字符输入/出流。没什么大的意义。

	// 	字节输出流->字符输出流
	Writer writer = new OutputStreamWriter(outputStream);
	//  字节输入流->字符输入流
	Reader reader = new InputStreamReader(inputStream);

  以此就能说明:所有的字符流都是经过字节流转换而来的。

 四、字符编码

  由于设计网络浏览器服务器编程就会有很大可能性出现乱码的问题,而乱码的最主要原因就是:编解码不一致
  要避免乱码问题,就需要知道常见的编码方式有哪些:
   1、GBK,GB2312:国际编码。GBK即包含简体中文也包含繁体中文,GB2312只包含简体中文。
   2、UNICODE:java提供的16进制编码,可以描述世界上任意文字,由于采用16进制编码,导致编码的体积太大,造成网络传输负担。
   3、ISO-8859-1:国际通用编码,但所有编码均需转换。
   4、UTF编码(UTF-8):结合了ISO-8859-1与UNICODE,支持所有语言,体积较小。以后编码只用UTF-8
  乱码产生的原因:
   windows10中文版默认GBK编码
   一般出现全是?:编解码不一致
   一般出现不认识的汉字:传输中丢失了部分数据

 五、内存流

  除了文件外,IO操作也可以出现在内存中,适用于:需要进行IO处理,但不希望产生文件。使用内存作为操作终端
  字节内存流:ByteArrayInputStream,ByteArrayOutputStream
  字符内存流:CharArrayReader,CharArrayWriter
  相当于把内存作为一个临时文件,这样理解即可。

 六、打印流

  对OutPutStream的升级
  字节打印流:PrintSteam
  字符打印流:PrintWriter

	printStream.print();
	printStream.write();

 七、标准输入输出

  标准输出:显示器
  标准输入:键盘
  System.out都是PrintStream的实例化对象,System.in是InputStream的对象。

 八、输入输出总结

  输出就用打印流(PrintWriter,PrintStream)
  输入就用Scanner(Scanner(InputStream input),将输入流传给Scanner即可,文件,网络等都可以)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值