当前位置: 首页 > news >正文

深入理解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类的一些常用方法,首先来看下一些重要的概念:

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

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

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

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

 1 package io;
 2 
 3 import java.io.File;
 4 import java.io.IOException;
 5 
 6 public class FileTest
 7 {
 8     public static void main(String[] args) throws IOException
 9     {
10         File file = new File("f:/migu");
11         file.mkdir();
12         //判断该抽象名表示的目录是否存在
13         if(file.exists() && file.isDirectory())
14         {
15             System.out.println("migu 目录存在");
16             File file1 = new File("f:/migu/UES.txt");
17             File file2 = new File("f:\\migu\\CMU.txt");
18             //创建文件
19             file1.createNewFile();
20             file2.createNewFile();
21             File file3 = new File("f:/migu/插件/支付中心");
22             //创建此抽象名表示的目录,以及所有必需但是不存在的父目录
23             file3.mkdirs();
24             File[] files = file.listFiles();
25             //该方法返回该路径下这一层的所有文件和目录
26             for(File f : files)
27             {
28                 System.out.println("migu目录下的文件名:" + f.getName());
29                 System.out.println("migu目录文件的绝对路径:" + f.getAbsolutePath());
30             }
31         }
32         else
33         {
34             System.out.println("migu 目录不存在");
35         }
36         
37     }
38 }

执行结果:

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中表示是转义符。所以用“\\”代表“\”。在这里我的建议是尽量都写成“/”,因为在所有的操作系统中“/”永远都是没有问题的。

 

转载于:https://www.cnblogs.com/dongguacai/p/5656471.html

相关文章:

  • Java中的一些方法
  • Ubuntu server 16.04 安装mysql并设置远程访问
  • mybatis源码学习: 编译的方法
  • iOS 主动抛出异常
  • A Game
  • 选择最适合你的Linux学习方法
  • 什么是GPS的冷启动、温启动和热启动?
  • Clone
  • 正则表达式学习
  • 2205 Problem B
  • [React]全自动数据表格组件——BodeGrid
  • csv格式导出文件
  • ASP.NET MVC进阶之路:深入理解依赖注入(DI)和控制反转(IOC)
  • 关闭listener监听日志
  • 文成小盆友python-num11-(1) 线程 进程 协程
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • ➹使用webpack配置多页面应用(MPA)
  • AHK 中 = 和 == 等比较运算符的用法
  • echarts花样作死的坑
  • js 实现textarea输入字数提示
  • Spring Boot MyBatis配置多种数据库
  • Spring Boot快速入门(一):Hello Spring Boot
  • 电商搜索引擎的架构设计和性能优化
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 和 || 运算
  • 盘点那些不知名却常用的 Git 操作
  • 《天龙八部3D》Unity技术方案揭秘
  • Prometheus VS InfluxDB
  • 大数据全解:定义、价值及挑战
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • #pragma once
  • #pragma pack(1)
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • (二十三)Flask之高频面试点
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (原)本想说脏话,奈何已放下
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转)创业的注意事项
  • (转)母版页和相对路径
  • **PHP二维数组遍历时同时赋值
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .NET 中创建支持集合初始化器的类型
  • .NetCore部署微服务(二)
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
  • .NET运行机制
  • 。Net下Windows服务程序开发疑惑
  • @我的前任是个极品 微博分析
  • []串口通信 零星笔记
  • [2010-8-30]
  • [4.9福建四校联考]
  • [Android] Upload package to device fails #2720
  • [BZOJ5125]小Q的书架(决策单调性+分治DP+树状数组)
  • [CDOJ 1343] 卿学姐失恋了