背景

最近在做安卓的过程中,因为im app经常涉及到读取与写入的io问题,所以总结一下。下文使用的是java语言。

实践

材料:

  1. java
  2. eclipse

1.File

在操作系统中我们一般能看到的就只有文件和文件夹。所以一般我们操作的一般也是他们,所以file就变得至关重要了,同样java把操作文件或文件夹的定义为File类,在基础包java.io中。

使用方式:

File file=new File("c:\\test.txt");

上述实例化源码:

public File(String pathname) {
if (pathname == null) {
throw new NullPointerException();
}
this.path = fs.normalize(pathname);
this.prefixLength = fs.prefixLength(this.path);
}

从上述中查看看到在实例化的过程看到一个是序列化了路径,然后取得了路径前缀的长度。

值得注意的是:因为这里使用了c:\test.txt,是使用//来表达,然而在linux中使用的却是/,File.separator可以取得当前系统分隔符,这降低了我们在写跨平台代码的错误率。

对文件的操作无非是增删改查,首先是从查看吧。查分为查看文件信息的读取查看。

查路径名:

 File file=new File("c://test.txt");
System.out.println(file.getPath());
System.out.println(file.getAbsolutePath());
try {
System.out.println(file.getCanonicalPath());
} catch (IOException e) {
// TODO: handle exception
}

分别取得了我们输入的路径,绝对路径,以及规范的路径。

可以看出规范的路径把c盘这个c变成了大写,在这里我加上了try 和catch,如果不加的话会编译不过,这是因为编写规范路径的时候对path进行了验证。

下面是具体验证的源码:

if (isInvalid()) {
throw new IOException("Invalid file path");
}
final boolean isInvalid() {
if (status == null) {
status = (this.path.indexOf('\u0000') < 0) ? PathStatus.CHECKED: PathStatus.INVALID;
}
return status == PathStatus.INVALID;
}

这是一种很常见的操作,在io操作中有很多需要我们处理的异常,有些刚开始学的人可能报错了觉得莫名奇妙。

查权限:

System.out.println(file.canRead());
System.out.println(file.canWrite());
System.out.println(file.canExecute());



我们查看到都为false,这是为何?难道设置了权限。其实我根本就没有创建这个文件,这是一个很关键的地方,也就是这些函数我们只能相信true不能相信false,false有太多可能性了。

File 有文件的意思也有文件夹的意思,文件夹就有目录啊。

在查询目录下的文件之前,起码想好下面几件事:

  1. 是否存在
  2. 这是否是一个目录
  3. 是否可读
if(file.exists()&&file.isDirectory()&&file.canRead())
{
// get subdirectory and file in the file
file.listFiles();
}

甚至提供可以进行过滤:

 file.listFiles(new FilenameFilter() {

	@Override
public boolean accept(File dir, String name) {
return false;
}
});

例如需要知道某个文件夹是否存有某个文件:

File[] files=file.listFiles(new FilenameFilter() {

	@Override
public boolean accept(File dir, String name) {
if (dir.isFile()&&name=="xxx") {
return true;
}
return false;
}
});
if (files.length>0) { }

增与删:

对于文件:

bool createNewFile(): 创建一个文件;

bool delete():删除文件或文件夹;

对于文件夹:

boolean mkdir():创建一个目录;

boolean mkdirs():创建当前一个目录,和mkdir不同的是如果c:/parent/child,如果parent不存在的时候会帮助我们创建;

boolean delete():删除文件或文件夹;

上述这些都觉得贫乏,那么临时文件可以说是一个亮点,比如我们写一些兴趣性代码的时候,创建了一个文件。我们想用完就删,但是呢,中间报错了,可能就需要手动了。

 try {
File file=File.createTempFile("tempTest",".txt");
file.deleteOnExit();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}

上述也许会解放你的双手。

如果需要创建在某个特定的目录下:

File f=new File("c:\\")
File file=File.createTempFile("tempTest",".txt",f);

第三个参数是一个File 类型,里面是需要放置的目录。

总结

本来打算自己总结一篇就ok,然而发现不可能的了。上述纯属个人回忆,无实际考察,如有帮助不甚荣幸,有错之处望请指正。

io流函数略解(java)[一]的更多相关文章

  1. io流函数略解(java_input流)[二]

    背景 在写这篇随笔之前,已经写了io流函数略解(java_File)(一),主要是总结了File的一些操作,以及一些源码介绍. 在Io实际应用中,实际上运用在如果会操作File,实际上很难写出一点能实 ...

  2. java中的io系统详解 - ilibaba的专栏 - 博客频道 - CSDN.NET

    java中的io系统详解 - ilibaba的专栏 - 博客频道 - CSDN.NET 亲,“社区之星”已经一周岁了!      社区福利快来领取免费参加MDCC大会机会哦    Tag功能介绍—我们 ...

  3. JAVA IO 类库详解

    JAVA IO类库详解 一.InputStream类 1.表示字节输入流的所有类的超类,是一个抽象类. 2.类的方法 方法 参数 功能详述 InputStream 构造方法 available 如果用 ...

  4. Java IO编程全解(一)——Java的I/O演进之路

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7419117.html JDK1.4之前的早期版本,Java对I/O的支持并不完善,开发人员在开发高性能I/O ...

  5. Java IO编程全解(三)——伪异步IO编程

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7723174.html 前面讲到:Java IO编程全解(二)--传统的BIO编程 为了解决同步阻塞I/O面临 ...

  6. Java IO编程全解(六)——4种I/O的对比与选型

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7804185.html 前面讲到:Java IO编程全解(五)--AIO编程 为了防止由于对一些技术概念和术语 ...

  7. Java IO编程全解(五)——AIO编程

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7794151.html 前面讲到:Java IO编程全解(四)--NIO编程 NIO2.0引入了新的异步通道的 ...

  8. Java IO编程全解(四)——NIO编程

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7793964.html 前面讲到:Java IO编程全解(三)——伪异步IO编程 NIO,即New I/O,这 ...

  9. Java IO编程全解(二)——传统的BIO编程

    前面讲到:Java IO编程全解(一)——Java的I/O演进之路 网络编程的基本模型是Client/Server模型,也就是两个进程之间进行相互通信,其中服务端提供位置信息(绑定的IP地址和监听端口 ...

随机推荐

  1. Project Euler 52: Permuted multiples

    可以看到数字125874的两倍251748和它有着完全相同的数字,只是顺序不同而已.求一个最小的正整数\(x\),使得\(2x,3x,4x,5x,6x\)都有完全相同的数字. 分析:此题的思路比较直接 ...

  2. markdown 编辑器概述

    markdown 编辑器概述     编辑器其实很多很多,主要分为    网页编辑和软件编辑 (效果其实感觉效果差不多,看个人喜好,笔者个人还是喜欢本地,感觉方便挺多的) ## 网页编辑器 主要有 C ...

  3. zookeeper集群模式安装

    服务器节点规划: 节点1:192.168.0.103 节点2:192.168.0.104 节点3:192.168.0.105 安装zookeeper,将zookeeper上传到三个服务器,保存在/ho ...

  4. 每天3分钟操作系统修炼秘籍(14):IO操作和DMA、RDMA

    点我查看秘籍连载 I/O操作和DMA.RDMA 用户进程想要执行IO操作时(例如想要读磁盘数据.向磁盘写数据.读键盘的输入等等),由于用户进程工作在用户模式下,它没有执行这些操作的权限,只能通过发起对 ...

  5. SSM配置梳理

      这两天梳理了一下 SSM 的配置,做一个小总结   可能有一些不对的地方,如果您发现了什么错误,非常希望能帮忙指出,谢谢 我参考了很多文章,都标明了来源(链接),可能会影响阅读的连贯性,抱歉   ...

  6. 最近的项目系列1——core整合SPA

    1.前言 当前,前后端分离大行其道,我本人之前不少项目也是纯前后端分离,但总有些场景,春前后端分离整起来比较痛苦,比如我手头这个公众号项目吧,它涉及到第三方鉴权,第三方凭证,以及微信凭证这些,都不适合 ...

  7. QKD 一些术语的含义

    密钥率:每个信道使用的比特数. 系统开销:不能用来提取最终密钥的信号百分比. SNU:散粒噪声单元 RNG:随机数发生器 QRNG:量子随机数发生器 TRNG:真正的随机数生成器 PRNG:伪随机数发 ...

  8. 通过javascript 执行环境理解她

    古往今来最难的学的武功(javascript)算其一. 欲练此功必先自宫,愿少侠习的此功,笑傲江湖. 你将了解 执行栈(Execution stack) 执行上下文(Execution Context ...

  9. java编程思想第四版第七章总结

    1. 实现类的复用通常有两种方式 组合:在新的类中产生现有类的对象 继承:按照现有类的类型来创造新类 2. 一个特殊的方法toString() 在非基本类型的对象中, 都有toString()方法 当 ...

  10. nyoj 56-阶乘因式分解(一)(数学)

    56-阶乘因式分解(一) 内存限制:64MB 时间限制:3000ms Special Judge: No accepted:15 submit:16 题目描述: 给定两个数m,n,其中m是一个素数. ...