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

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团长(javatuanzhang)

原文发表时间:2018-02-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏老马说编程

(56) 文件概述 / 计算机程序的思维逻辑

我们在日常电脑操作中,接触和处理最多的,除了上网,大概就是各种各样的文件了,从本节开始,我们就来探讨文件处理,本节主要介绍文件有关的一些基本概念和常识,Java...

2065
来自专栏同步博客

浅谈PHP异常处理

  PHP中的异常的独特性,即PHP中的异常不同于主流语言C++、java中的异常。在Java中,异常是唯一的错误报告方式,而在PHP中却不是这样,而是把所有不...

1333
来自专栏JavaEdge

操作系统之文件管理

将文件属性从外存拷到内存中打开文件表的一表目中 将其编号返回给用户。 系统可利用该编号到打开文件表中去查找。

35610
来自专栏北京马哥教育

python线程笔记

豌豆贴心提醒,本文阅读时间5分钟 来源:伯乐在线 原文:http://python.jobbole.com/87498/ 引言&动机 考虑一下...

3015
来自专栏13blog.site

Spring+SpringMVC+MyBatis+easyUI整合基础篇(八)mysql中文查询bug修复

前言   在测试搜索时出现的问题,mysql通过中文查询条件搜索不出数据,但是英文和数字可以搜索到记录,中文无返回记录。本文就是写一下发现问题的过程及解决方法...

3305
来自专栏小狼的世界

Python3.6学习笔记(五)

网络程序出现的比互联网要早很多,实现方式主要依靠网络上不同主机间进程的通信,通信协议最重要的是TCP/IP协议。在这两个协议基础上还有很多更高级的协议,包括HT...

1342
来自专栏瓜大三哥

Matlab基本语法7

基本编程技巧 脚本m文件和函数m文件,脚本是一系列命令、语句的简单组合。脚本文件中的变量都是全局变量,程序运行后,这些变量保存在matlab的基本工作空间内,一...

2489
来自专栏www.96php.cn

【fastadmin】踩坑第二发-CMS插件后台文章状态修改未通过前台报错

我们找到模板application\index\view\cms\archives\my.html 大概46-52行

5383
来自专栏依乐祝

.NET Core实战项目之CMS 第三章 入门篇-源码解析配置文件及依赖注入

上篇文章我给大家讲解了ASP.NET Core的概念及为什么使用它,接着带着你一步一步的配置了.NET Core的开发环境并创建了一个ASP.NET Core的...

840
来自专栏mathor

matlab—结构化程式与自定函数

按照步骤一步步来,创建脚本之后,将下面代码复制到编辑器内,然后点击运行或者摁键盘F5

922

扫码关注云+社区

领取腾讯云代金券