深入理解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类没有指定信息怎样从文件读取或向文件存储。
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中表示是转义符。所以用“\\”代表“\”。在这里我的建议是尽量都写成“/”,因为在所有的操作系统中“/”永远都是没有问题的。
深入理解JAVA I/O系列一:File的更多相关文章
- 深入理解java内存模型系列文章
转载关于java内存模型的系列文章,写的非常好. 深入理解java内存模型(一)--基础 深入理解java内存模型(二)--重排序 深入理解java内存模型(三)--顺序一致性 深入理解java内存模 ...
- 深入理解JAVA I/O系列四:RandomAccessFile
一.简述 这个是JDK上的截图,我们可以看到它的父类是Object,没有继承字节流.字符流家族中任何一个类.并且它实现了DataInput.DataOutput这两个接口,也就意味着这个类既可以读也可 ...
- 深入理解JAVA I/O系列六:Linux中的IO模型
IO模型 linux系统IO分为内核准备数据和将数据从内核拷贝到用户空间两个阶段. 这张图大致描述了数据从外部磁盘向运行中程序的内存中移动的过程. 用户空间.内核空间 现在操作系统都是采用虚拟存储器, ...
- 深入理解JAVA I/O系列六:Linux中的IO模型(转载的文章非常值得学习)
From:http://www.cnblogs.com/dongguacai/p/5770287.html IO模型 linux系统IO分为内核准备数据和将数据从内核拷贝到用户空间两个阶段. 这张图大 ...
- Java内存模型解惑--观深入理解Java内存模型系列文章有感(二)
1.volatile关键字修饰的域的特性 当我们声明共享变量为volatile后,对这个变量的读/写将会很特别.理解volatile特性的一个好方法是:把对volatile变量的单个读/写,看成是使用 ...
- 深入理解JAVA I/O系列二:字节流详解
流的概念 JAVA程序通过流来完成输入/输出.流是生产或消费信息的抽象,流通过JAVA的输入输出与物理设备链接,尽管与它们链接的物理设备不尽相同,所有流的行为具有相同的方式.这样就意味一个输入流能够抽 ...
- 深入理解JAVA I/O系列五:对象序列化
序列化 对象序列化的目标是将对象保存到磁盘中,或者允许在网络中直接传输对象.对象序列化机制允许把内存中的JAVA对象转换成跟平台无关的二进制流,从而允许将这种二进制流持久地保存在磁盘上,通过网络将这种 ...
- 深入理解JAVA I/O系列三:字符流详解
字符流为何存在 既然字节流提供了能够处理任何类型的输入/输出操作的功能,那为什么还要存在字符流呢?容我慢慢道来,字节流不能直接操作Unicode字符,因为一个字符有两个字节,字节流一次只能操作一个字节 ...
- 深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)
作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文链接:http://zh.lucida.me/blog/java-8-lambdas-insideout-language- ...
随机推荐
- Verilog 位拼接运算符的优先级
最近研究FIFO的时候,在开源工程中看到这样一段代码 ; always @(posedge rd_clk) {'b0}}; else {'b0}}; else if(re) rp_bin <= ...
- Visual Studio 2010 Express for Windows Phone 永久免费序列号
Visual Studio 2010 Express for Windows Phone 永久免费序列号:YDK44-2WW9W-QV7PM-8P8G8-FTYDF
- 33 -FTP文件传输
1.需求 2.流程图 3.自己的版本 4.老师评语 5.修改后的代码 6.修改后版本
- cjoj P1435 - 【模板题 USACO】AC自动机 && 洛谷 P3796 【模板】AC自动机(加强版)
又打了一遍AC自动稽. 海星. 好像是第一次打trie图,很久以前就听闻这个思想了.OrzYYB~ // It is made by XZZ #include<cstdio> #inclu ...
- Springboot日记——核心编码篇
背景吐槽:想要让自己进阶一下,一定要有个可以拿出来秀的东西,所以要尝试写一个属于自己的网站或者平台.因此,我大概的看了一下springboot+Mybatis-plus+... 框架介绍 通常 SSM ...
- 用Metaclass实现一个精简的ORM框架
存档: # -*- coding: utf-8 -*- class Field(object): def __init__(self, name, column_type): self.name = ...
- tikz中谐振子(弹簧)的绘制,以及声子色散关系的绘制
今天整理了简正模导出声子的内容,其中用tikz画了两张图.一张是整个问题的物理模型,效果如下 这幅图的绘制参考了https://tex.stackexchange.com/questions/4160 ...
- AltiumDesigner 热焊盘铺铜
在layout中,引脚与大面积的铺铜完全连接容易造成过分散热而产生虚焊以及避免因过分散热而必须使用大功率焊接器,因此在大面积铺铜时,对于接地引脚,我们经常使用热焊盘.在AltiumDesigner 中 ...
- Netty源码分析第7章(编码器和写数据)---->第4节: 刷新buffer队列
Netty源码分析第七章: 编码器和写数据 第四节: 刷新buffer队列 上一小节学习了writeAndFlush的write方法, 这一小节我们剖析flush方法 通过前面的学习我们知道, flu ...
- eclipse创建spring boot项目加载不到application.properties配置文件
在配置文件application.properties中修改了端口号,但重启服务后发现端口号并没有跟着改变,发现是项目启动时没有加载application.properties文件导致 解决:项目-& ...