背景

最近在做安卓的过程中,因为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. MVC5用户控件

    1. 添加一个model,用于给用户控件传递数据: 2.添加一个部分视图 . 3. 部分视图中,引入model,用于传递数据 4. 在要插入用户控件的地方,这样写 @Html.Partial(&quo ...

  2. 重邮二进制群-pwn1

    给学弟们练手的题目,做的过程中接触一些基本概念 #include <stdio.h> #include <unistd.h> int main() { ]; welcome() ...

  3. MinIO 分布式集群搭建

    MinIO 分布式集群搭建 分布式 Minio 可以让你将多块硬盘(甚至在不同的机器上)组成一个对象存储服务.由于硬盘分布在不同的节点上,分布式 Minio 避免了单点故障. Minio 分布式模式可 ...

  4. NOIP模拟赛18 皇帝的烦恼O(∩_∩)O 二分+DP

    题目描述 经过多年的杀戮,秦皇终于统一了中国.为了抵御外来的侵略,他准备在国土边境安置n名将军.不幸的是这n名将军羽翼渐丰,开始展露他们的狼子野心了.他们拒绝述职.拒绝接受皇帝的圣旨. 秦皇已经准备好 ...

  5. Spring Boot 2.X(十七):应用监控之 Spring Boot Admin 使用及配置

    Admin 简介 Spring Boot Admin 是 Spring Boot 应用程序运行状态监控和管理的后台界面.最新UI使用vue.js重写里. Spring Boot Admin 为已注册的 ...

  6. nginx recv() failed (104: Connection reset by peer) while reading response header from upstream解决方法

    首先说下 先看 按照ab 每秒请求的结果 看看 都有每秒能请求几个 如果并发量超出你请求的个数 会这样 所以一般图片和代码服务器最好分开 还有看看io瓶ding 和有没有延迟的PHP代码执行 0 先修 ...

  7. 使用Rider中搭建specflow+xunit+selenium对web页面进行自动化功能测试环境

    运行rider,创建测试解决方案,选择xunit,点击create创建 ​   导入包,由于本人使用chrome浏览器(需先下载好对应的浏览器驱动),所以导入了selenium.webdriver.c ...

  8. Class文件结构全面解析(上)

    什么是Class文件? 在Java刚刚诞生的时候就提出了一个非常著名的口号:"一次编写,到处运行.(Write Once,Run Anywhere)".为了实现平台无关性,各种不同 ...

  9. spring boot使用注解的方式引入mybatis的SqlSessionDaoSupport

    出现这个问题, 说明一点, 我对spring的注解方式的配置只是知道一个皮毛. 没有深入理解. 有时间要把这部分充充电 package com.zhike.qizhi.common.dao; impo ...

  10. python:类5——Python 的类的下划线命名有什么不同?

    首先是单下划线开头,这个被常用于模块中,在一个模块中以单下划线开头的变量和函数被默认当作内部函数,如果使用 from a_module import * 导入时,这部分变量和函数不会被导入.不过值得注 ...