1.1 输入输出
输入:允许程序读取外部数据(磁盘、光盘等等),和 程序运行时内存中的数据。
输出:允许程序 在运行状态时,将程序数据 输出到 各种可输出的地方。
换句话说,我们 只需要知道,输入 就是 把一些 数据 读到内存中,输出 就是 从内存中把一些数据 写到 一些地方。
为什么 上来 就要 明确的 认识以下 输入 输出呢?甚至 我们必须 下一个 比较清晰的 定义。
这是因为 Java 的 IO 对于 一些 科班C/C++ 的学生而言,并不是那么 好理解。
比如说 曾经 就有个 粉丝私信 问过我,当客户端发送数据过来的时候,为什么 要在 TCP服务端那里 先写一个 inputStream ,像这类人 其实有很多,大家不要笑。
因为很大一部分人,都是从 C/C++ 转来的。他们都是从 效果上 来 看待输入和输出的。打个比方,对于他们来说:输入 就是 单纯的 打字输入。输出 就是 直接输出。文件操作的话,有 读写的方法。所以 它们完全没有 IO流 概念。一时之间 无法进行 一个很好的 等效替换。这就使得 在理解方面比较困惑。
所以 在学习 IO 流之前 我们 必须 先 明确的 告诉你 什么 才是 输入,什么 才是输出。而并非是 只从 效果上 来 看待输入和输出。
上述那位粉丝的问题答案是:因为 这个所谓的传输数据,其实是 在客户端把数据写到了 输入流里。所以我们需要从 socket 输入流里面获取到。这是因为 我们 这些数据 都被 写入到了 这个流里。而 我们的输入 就是 拿到 数据。获取数据。并且 在 拿到是数据后,可以 创建一个 FileOutStream 把这个 数据 写到 一个 文件里。这样就可以 实现 文件的传输。
1.2 File 类
如果 是文件操作甚至是文件夹(目录)的话,你必须要 学习 File 类。
① public File(String pathname)
通过将 给定的路径字符串转换未 抽象路径来 创建 新的 File 实例。
② file.getAbsolutePath()
**返回文件的绝对 路径 **
当你 使用了 相对路径创建了 File 对象,但是 你还想知道 这个 File 的 绝对路径的话,就要用 这个 方法了。而且有些时候 我们 不可能来回的 把 这个路径 复制粘贴 来 用,当这个时候的话,我们必须要 getAbsolutePath() 返回 绝对路径的。
file.getPath()
返回 你 输入的那个路径。
file.getName()
直接 获取 到 对应的 文件名,这个方法 极其的方便,必须要 自己 写 一个 字符串的处理方法 来获取文件名了。
③ file.renameTo(待复制或重命名后的 file对象)
这里必须要 提供一个 File 对象,当 这个 File 对象 里面的 path 发生了 位置变化,那么就是 复制粘贴,如果 仅仅是 文件名 变了,那就是改名。
④ file.exists()
判断文件 是否存在
确实 这个文件 已经 被我们 改名了,肯定是 不存在的。 我们 可以很方便的 用这个 方法 来判断 文件或 目录 是否存在。
⑤ canWrite()
判断 File 对象 对应的文件和目录 是否可写
⑥ canRead()
判断 File 对象 对应的文件和目录 是否可读
⑦ isFile()
判断 File 对象 是否是文件
⑧ isDirectory()
判断 File 对象 是否是 目录
⑨ isAbsolute()
判断 在各个平台上,这个文件的路径 到底是不是 绝对路径。linux 下 以 / 开头的是 绝对路径,而 win 下 就必须是 以 盘符 开头的才是 绝对路径。
⑩ lastModified()
返回文件的 最后修改时间戳
①① length()
返回 文件内容的长度
1.2 File 类 的深入浅出
① createNewFile()
如果文件不存在,创建一个 新文件
② delete()
删除 File 对象 所对应的 文件 或 路径
③ mkdir()
试图创建 File 所对应的目录,但是 不会 创建 父目录。
④ mkdirs()
试图创建 File 所对应的目录,也 会 创建 父目录。所以大多数情况下,也都用 mkdirs() 来做一个创建目录的活。
⑤ list() 列出 File 对象 下 的 所有 子文件 和 目录路径,但只会 返回 一个 String 数组。若 后续用 File 操作,还需要 自行转为 File。
⑥ listFiles() 列出 File 对象 下的 所有 子文件 和 目录路径,但 它 会 返回一个 File 数组。
⑦ FilenameFileter
File 过滤器,将 需要保留的 文件路径 保留下来,而不需要保留的 则不保留。
String[] subList = file1.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.endsWith("exe");
}
});
System.out.println(Arrays.toString(subList));
遍历 文件
public static void f(String fileName){
File file = new File(fileName);
if(file.isDirectory()){
for(String fi:file.list()){
f(file.getPath() + "\\" + fi);
}
}
if(file.isFile()){
System.out.println(file.getAbsoluteFile());
}
}