深入理解Java I/O系列一:File

转载 2018年02月09日 00:00:00

I/O简介 

I/O问题可以说是当今web应用中所面临的的主要问题之一,大部分的web应用系统的瓶颈都是I/O瓶颈。这个系列主要介绍JAVA的I/O类库基本架构、磁盘I/O工作机制、网络I/O工作机制以及NIO的工作方式。


从1.4版本开始JAVA引入了NIO,用来提升I/O性能。I/O操作类在包java.io下,大概有将近80个类,这些类可以分为如下四组:

  • 基于字节操作的I/O接口:InputStream和OutputStream

  • 基于字符操作的I/O接口:Reader和Writer

  • 基于磁盘操作的I/O接口:File

  • 基于网络操作的I/O接口:Socket


从字面意思理解,前两组主要是传输数据的格式,后两组是传输数据的方式。虽然Socket类并不在java.io包下,但是我们仍然将其归类在一起来讨论。因为我个人认为I/O的核心问题要么是数据格式影响I/O操作,要么是传输方式影响I/O操作。最终的问题也就是将什么样的数据写到什么地方的问题。


File类

本篇文章主要介绍File类的一些常用方法,首先来看下一些重要的概念:

  • 一个File类的对象,表示磁盘上的文件或目录。

  • File提供了与平台无关的方法来对磁盘上的文件或目录进行操作。

  • File类直接处理文件和文件系统。

  • File类没有指定信息怎样从文件读取或向文件存储。


package io;

import java.io.File;
import java.io.IOException;

public class FileTest
{
   public static void main(String[] args) throws IOException
   
{
       File file = new File("f:/migu");
       file.mkdir();
       //判断该抽象名表示的目录是否存在
       if(file.exists() && file.isDirectory())
       {
           System.out.println("migu 目录存在");
           File file1 = new File("f:/migu/UES.txt");
           File file2 = new File("f:\\migu\\CMU.txt");
           //创建文件
           file1.createNewFile();
           file2.createNewFile();
           File file3 = new File("f:/migu/插件/支付中心");
           //创建此抽象名表示的目录,以及所有必需但是不存在的父目录
           file3.mkdirs();
           File[] files = file.listFiles();
           //该方法返回该路径下这一层的所有文件和目录
           for(File f : files)
           {
               System.out.println("migu目录下的文件名:" + f.getName());
               System.out.println("migu目录文件的绝对路径:" + f.getAbsolutePath());
           }
       }
       else
       {
           System.out.println("migu 目录不存在");
       }
       
   }
}


执行结果:

migu 目录存在
migu目录下的文件名:CMU.txt
migu目录文件的绝对路径:f:\migu\CMU.txt
migu目录下的文件名:UES.txt
migu目录文件的绝对路径:f:\migu\UES.txt
migu目录下的文件名:插件
migu目录文件的绝对路径:f:\migu\插件


这个DEMO展示的跟File类相关的方法都是简单易懂的,其中有两个地方需要强调下:

1、mkdirs是创建抽象名表示的文件或者目录,并且还会创建该目录或者文件的所有不存在的父目录。

2、在16、17行,我这里用了两种不同的路径分割符来表示抽象路径,从运行结果来看都是可行的。那么两者有什么区别呢?

不同操作系统下文件分隔符:windows中是“\”,linux中是“/”,在用JAVA代码去读取windows系统中磁盘上的文件时候,若要用“\”,必须写成“\\”,因为一个"\"在java中表示是转义符。所以用“\\”代表“\”。在这里我的建议是尽量都写成“/”,因为在所有的操作系统中“/”永远都是没有问题的。

  • 原文:http://www.cnblogs.com/dongguacai/p/5656471.html


如果你在学习Java的过程中遇见什么问题或者想获取一些学习资源的话欢迎加入团长的Java学习交流QQ群:495273252

640?wx_fmt=gif

Java团长

微信号:javatuanzhang

每日分享Java技术干货

640?wx_fmt=jpeg

长按识别二维码

深入理解JavaI/O流

其实我个人觉得,javaI/O流是一种比较乏味的事情。因为看不到明显的运行效果,但是输入输出程序都需要用到I/O操作即:允许程序读取外部数据、用户输入数据,使用输出机制允许程序记录运行状态,将数据仅处...
  • blueZhangFun
  • blueZhangFun
  • 2015年07月27日 11:59
  • 1458

《深入理解计算机系统》--系统级I/O

关于I/O可以先参考这些文章,但是这里可能还是有所不同。分析系统级别的I/O有什么不一样的地方。 文件I/O 高级I/O 标准库I/O     开篇介绍了三个级别的I/O的区别之处。所有语言的运行时系...
  • yusiguyuan
  • yusiguyuan
  • 2013年10月14日 16:46
  • 1757

深入理解MySQL 5.7 GTID系列(一)

作者:高鹏(重庆八怪)原文地址:http://www.jianshu.com/p/87f66cdeb49c本次将陆续推出系列文章共十篇,本文使用的源码版本为percona 5.7.14,也比较过5.7...
  • n88Lpo
  • n88Lpo
  • 2018年01月06日 00:00
  • 342

系统级I/O与标准I/O--“深入理解计算机系统”

概念简介 输入输出I/O是在主存和外部设备(如磁盘,网络和终端)之间拷贝数据的过程。 输入就是从I/O设备拷贝数据到贮存,而输出就是从主存拷贝数据到I/O设备。 所有语言的运行时系统...
  • allenguo123
  • allenguo123
  • 2013年12月12日 11:31
  • 511

这些年一直记不住的 Java I/O

阅读目录 参考资料 前言 从对立到统一,字节流和字符流 从抽象到具体,数据的来源和目的 从简单到丰富,使用 Decorator 模式扩展功能 Java 7 中引入的 NIO.2 ...
  • xxfigo
  • xxfigo
  • 2017年05月22日 17:48
  • 3048

深入理解Spring系列之一:开篇

Spring经过大神们的构思、编码,日积月累而来,所以,对其代码的理解也不是一朝一夕就能快速完成的。源码学习是枯燥的,需要坚持!坚持!坚持!当然也需要技巧,第一遍学习的时候,不用关注全部细节,不重要的...
  • tianruirui
  • tianruirui
  • 2016年10月30日 20:18
  • 2614

【JAVA】File I/O

Java:File I/O
  • mjianglei
  • mjianglei
  • 2016年09月12日 00:30
  • 710

dubbo深入理解(1)

dubbo学习,分布式服务架构,国内最好的一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案...
  • maybe_fly
  • maybe_fly
  • 2017年09月11日 14:18
  • 274

《JAVA I/O最详解》

刚开始学Java时候,一直搞不懂Java里面的io关系,在网上找了很多大多都是给个结构图草草描述也看的不是很懂。而且没有结合到java7 的最新技术,所以自己结合API来整理一下,有错的话请指正,...
  • self_realian
  • self_realian
  • 2016年07月19日 17:31
  • 1925

JavaI/O体系详解

Java中IO操作主要是指使用Java进行输入,输出操作,Java中所有的IO操作类都存放在Java.io包中,在使用时需要导入此包。 在整个Java.io包中最重要的就是5个类和一个接口。5个类指的...
  • htq__
  • htq__
  • 2016年03月27日 19:36
  • 961
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深入理解Java I/O系列一:File
举报原因:
原因补充:

(最多只允许输入30个字)