IO系列学习(一)

简介: IO系列学习(一)

JAVA 的FILE类,以及常用方法


使用绝对路径或者相对路径创建File对象


package com.example.IO;
import java.io.File;
public class Test1 {
    public static void main(String[] args) {
        //绝对路径
        File f1 = new File("G:\\File");
        System.out.println("f1的相对路径"+f1.getAbsolutePath());
        // 相对路径,相对于工作目录,如果在idea中,就是项目目录  和你的claas 在一起
        File f2 = new File("file.txt");
        System.out.println("f2的相对路径"+f2.getAbsolutePath());
        File f3 =new File(f1,"file.txt");
        // 把f1作为父目录创建文件对象
        System.out.println("f3的相对路径"+f3.getAbsolutePath());
    }
}


运行结果

f1的相对路径G:\File
f2的相对路径F:\IDEA_gulimall\Login_Register\yanwc\file.txt
f3的相对路径G:\File\file.txt


注意1: 需要在D:\LOLFolder确实存在一个LOL.exe,才可以看到对应的文件长度、修改时间等信息

注意2: renameTo方法用于对物理文件名称进行修改,但是并不会修改File对象的name属性


package com.example.IO;
import java.io.File;
import java.util.Date;
public class Test1 {
    public static void main(String[] args) {
        File f = new File("G:\\File\\file.txt");
        System.out.println("当前文件是:" + f);
        //文件是否存在
        System.out.println("判断是否存在:" + f.exists());
        //是否是文件夹
        System.out.println("判断是否是文件夹:" + f.isDirectory());
        //是否是文件(非文件夹)
        System.out.println("判断是否是文件:" + f.isFile());
        //文件长度
        System.out.println("获取文件的长度:" + f.length());
        //文件最后修改时间
        long time = f.lastModified();
        Date d = new Date(time);
        System.out.println("获取文件的最后修改时间:" + d);
        //设置文件修改时间为1970.1.1 08:00:00
        f.setLastModified(0);
        //文件重命名
        File f2 = new File("G:\\File\\FILE.txt");
        f.renameTo(f2);
        System.out.println("把file改名成了FILE");
        System.out.println("修改名字后的结果是"+f2);
        System.out.println("注意: 需要在G:\\File存在FILE,\r\n才可以看到对应的文件长度、修改时间等信息");
    }
}


运行结果是

当前文件是:G:\File\file.txt
判断是否存在:true
判断是否是文件夹:false
判断是否是文件:true
获取文件的长度:0
获取文件的最后修改时间:Thu Jan 01 08:00:00 CST 1970
把file改名成了FILE
修改名字后的结果是G:\File\FILE.txt
注意: 需要在G:\File存在FILE,
才可以看到对应的文件长度、修改时间等信息


文件常用设置


package file;
import java.io.File;
import java.io.IOException;
public class TestFile {
    public static void main(String[] args) throws IOException {
        File f = new File("d:/LOLFolder/skin/garen.ski");
        // 以字符串数组的形式,返回当前文件夹下的所有文件(不包含子文件及子文件夹)
        f.list();
        // 以文件数组的形式,返回当前文件夹下的所有文件(不包含子文件及子文件夹)
        File[]fs= f.listFiles();
        // 以字符串形式返回获取所在文件夹
        f.getParent();
        // 以文件形式返回获取所在文件夹
        f.getParentFile();
        // 创建文件夹,如果父文件夹skin不存在,创建就无效
        f.mkdir();
        // 创建文件夹,如果父文件夹skin不存在,就会创建父文件夹
        f.mkdirs();
        // 创建一个空文件,如果父文件夹skin不存在,就会抛出异常
        f.createNewFile();
        // 所以创建一个空文件之前,通常都会创建父目录
        f.getParentFile().mkdirs();
        // 列出所有的盘符c: d: e: 等等
        f.listRoots();
        // 刪除文件
        f.delete();
        // JVM结束的时候,刪除文件,常用于临时文件的删除
        f.deleteOnExit();
    }
}


练习1


一般说来操作系统都会安装在C盘,所以会有一个 C:\WINDOWS目录。


遍历这个目录下所有的文件(不用遍历子目录)


找出这些文件里,最大的和最小(非0)的那个文件,打印出他们的文件名


注: 最小的文件不能是0长度

package com.example.IO;
import java.io.File;
import java.util.Arrays;
import java.util.Date;
public class Test1 {
    public static void main(String[] args) {
        long minSize = Integer.MAX_VALUE; 定义一个最大值,方便后面最小值的赋值
        long maxSize = 0;//定义为0,方便后面最大值的赋值
        //定义最大字节和最小文件
        File Maxfile = null;
        File Minfile = null;
        File f1 = new File("D:\\XMind");
        Boolean f2 = f1.exists();
        System.out.println("查看是否存在改文件夹" + f2);
        //为空直接返回
        if (f2 == false) {
            return;
        }
        File[] fs = f1.listFiles();
        //数组转换
        System.out.println("fs" + Arrays.toString(fs));
        for (File file : fs) {
            if (file.isDirectory()) {
                continue;//如果是文件夹,则跳出此次循环
            }
            //如果文件字节大小大于0
            if (file.length() > maxSize) {
                maxSize = file.length();//将字节大小赋值给maxSize
                Maxfile = file;//将文件名赋值给maxFile
            }
            //判断文件字节大小不为o,且小于minSize,
            //第二次循环进来的时候,如果第二次文件字节大小小于第一次,则再一次进行赋值,循环结束,则有最小字节数
            if (file.length()!=0 && file.length()<minSize){
                minSize = file.length();;
                Minfile = file;
            }
        }
        System.out.println("最大的文件是"+Maxfile+",其大小是"+maxSize+"字节");
        System.out.println("最小的文件是"+Minfile+",其大小是"+minSize+"字节");
    }
}


结果为:

查看是否存在改文件夹true
fs[D:\XMind\artifacts.xml, D:\XMind\bcl-java.txt, D:\XMind\configuration, D:\XMind\epl-v10.html, D:\XMind\features, D:\XMind\jre, D:\XMind\lgpl-3.0.html, D:\XMind\p2, D:\XMind\plugins, D:\XMind\readme.txt, D:\XMind\thirdparty, D:\XMind\tools, D:\XMind\unins000.dat, D:\XMind\unins000.exe, D:\XMind\XMind-original.ini, D:\XMind\XMind.exe, D:\XMind\XMind.ini, D:\XMind\xmindshell.dll, D:\XMind\xmind_file.ico, D:\XMind\xmind_xmp.ico, D:\XMind\xmind_xmt.ico]
最大的文件是D:\XMind\unins000.exe,其大小是1196233字节
最小的文件是D:\XMind\XMind-original.ini,其大小是506字节


什么JAVA 的流 STREAM?


什么是流(Stream),流就是一系列的数据

比如读取文件的数据到程序中,站在程序的角度来看,就叫做输入流

输入流: InputStream

输出流:OutputStream


如下代码,就建立了一个文件输入流,这个流可以用来把数据从硬盘的文件,读取到JVM(内存)。

目前代码只是建立了流,还没有开始读取,真正的读取在下个章节讲解。

package stream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class TestStream {
  public static void main(String[] args) {
  try {
    File f = new File("d:/lol.txt");
    // 创建基于文件的输入流
    FileInputStream fis = new FileInputStream(f);
    // 通过这个输入流,就可以把数据从硬盘,读取到Java的虚拟机中来,也就是读取到内存中
  } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
  }
  }
}


输出流

package file;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
public class TestStream {
    public static void main(String[] args) {
        File f =new File("d:/lol.txt");
        try {
            FileOutputStream fos = new FileOutputStream(f);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}


相关文章
|
10月前
|
Linux 测试技术 API
linux系统编程 文件io
linux系统编程 文件io
132 0
|
监控 调度 开发工具
IO神器blktrace使用介绍
## 前言 1. blktrace的作者正是block io的maintainer,开发此工具,可以更好的追踪IO的过程。 2. blktrace 结合btt可以统计一个IO是在调度队列停留的时间长,还是在硬件上消耗的时间长,利用这个工具可以协助分析和优化问题。 ## blktrace的原理 一个I/O请求的处理过程,可以梳理为这样一张简单的图: ![](http://image
16576 0
|
12月前
|
存储 编译器 Linux
Linux系统编程2(基础IO详解)
Linux系统编程2(基础IO详解)
107 0
|
Java C语言
IO系列学习(二)
IO系列学习(二)
46 0
|
存储 网络协议 数据挖掘
Linux高级IO(一)
Linux高级IO
74 0
|
存储 程序员 Linux
Linux高级IO(二)
Linux高级IO
134 0
|
存储 调度 文件存储
系统IO编程
系统IO编程
88 0
|
存储 Java 数据库
IO基础知识总结下
《系统设计》系列
102 0
IO基础知识总结下
|
安全 程序员 Linux
IO 模型知多少
同步异步I/O,阻塞非阻塞I/O是程序员老生常谈的话题了,也是自己一直以来懵懵懂懂的一个话题。比如:何为同步异步?何为阻塞与非阻塞?二者的区别在哪里?阻塞在何处?为什么会有多种IO模型,分别用来解决问题?常用的框架采用的是何种I/O模型?各种IO模型的优劣势在哪里,适用于何种应用场景? 简而言之,对于I/O的认知,不能仅仅停留在字面上认识,了解内部玄机,才能深刻理解I/O,才能看清I/O相关问题的本质。
207 0
IO 模型知多少
|
缓存 Java API
摸鱼不如来了解一下--Java中IO和NIO概念和区别
一、IO和NIO的概念 NIO即New IO,这个库是在JDK1.4中才引入的。NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多。
117 0