背景

最近在做安卓的过程中,因为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. [BZOJ4310] 跳蚤 SAM || SA

    没有代码的. 传送门 先二分出第 \(mid\) 大的字串 \(s\),然后从后往前切割,每次大于 \(s\) 了就不行. 涉及到的操作:求第 \(mid\) 大子串:比较两个字串(求 \(lcp\) ...

  2. python学习之【第十六篇】:Python中的常用模块之OS模块、sys模块、random模块

    1. OS模块 OS模块是与操作系统交互的一个接口.内部提供了以下方法: os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname& ...

  3. unittest使用总结

    unittest简介 Unittest是python内置的一个单元测试框架,主要用于自动化测试用例的开发与执行 简单的使用如下 import unittest class TestStringMeth ...

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

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

  5. google在nature上发表的关于量子计算机的论文(Quantum supremacy using a programmable superconducting processor 译)— 附论文

    Google 2019年10月23号发表在Nature(<自然><科学>及<细胞>杂志都是国际顶级期刊,貌似在上面发文两篇,就可以评院士了)上,关于量子计算(基于 ...

  6. PHP经典算法题

    1.百钱买百鸡 公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱,用100文钱买一百只鸡,其中公鸡,母鸡,小鸡都必须要有,问公鸡,母鸡,小鸡要买多少只刚好凑足100文钱. 分析:估计现在小学生都能手工推 ...

  7. 回声消除中的LMS和NLMS算法与MATLAB实现

    自适应滤波是数字信号处理的核心技术之一,在科学和工业上有着广泛的应用领域.自适应滤波技术应用广泛,包括回波抵消.自适应均衡.自适应噪声抵消和自适应波束形成.回声对消是当今通信系统中普遍存在的现象.声回 ...

  8. 领扣(LeetCode)对称二叉树 个人题解

    给定一个二叉树,检查它是否是镜像对称的. 例如,二叉树 [1,2,2,3,4,4,3] 是对称的. 1 / \ 2 2 / \ / \ 3 4 4 3 但是下面这个 [1,2,2,null,3,nul ...

  9. linux文件时间

    Linux 查看文件修改时间(精确到秒)(简单) ls --full-time 查看文件时间戳命令:stat test.txt linux 下查看文件修改时间 等(详细) 查看文件时间戳命令:stat ...

  10. 总结:mysql的各种增删改查!

    (原创总结)分为数据库的增删改查,数据表(和字段)的增删改查,数据的增删改查 三部分!// 创建用户并授权 GRANT SELECT ON bodydb.user TO us@localhost ID ...