IO这一部分内容还是比较多的,对于基础的枯燥但是又重要的内容还是将它记下来比较好。

关于File类

Ø File类直接继承与Object类,File类描述了文件本身的一些属性,File类用来获取或者处理与磁盘上的文件相关的信息,例如文件权限、文件创建时间、文件路径等等,File类还可以用来浏览目录的层次结构。

Ø 一个File类对象表示磁盘上的文件或目录(目录也是一种特殊的文件)

Ø File类提供了一个与平台无关的方法,只可直接对磁盘上的文件或者目录进行操作,屏蔽了底层的相关技术。

Ø File类可以直接处理文件或者文件系统。

Ø File类并没有指定是从文件中读出信息还是将信息写入到文件中。

常用的构造方法:

File(String str) str表示文件的路径,在Java中对于Windows系统而言,比如这个路径: “D:\Java\jdk6”在windows系统中,路径的分隔符都使用‘\’这个和java中的转义字符一样了,因此要写成“\\”才能恢复本身的字符‘\’的功能。对于Linux的系统而言,文件路径之间的分隔符采用的是“/”左斜杠,这就不存在使用转移字符的问题了。对于从windows系统变到Linux系统上的Java程序,文件路径一定要对应地进行调整。

File(File parent,String str)这个表示在父目录parent下(parent在这里是一个目录文件),创建一个名为str的文件。只要是前后两部分拼接起来构成一个完整的文件路径就OK了。

File类一些常用的函数的示例:

package com.file.fileMethod;
import java.io.File;
import java.io.FilenameFilter; public class methodTest { public static void main(String[]args){
File file=new File("F:\\filetest1\\filetest2\\filetest3");
System.out.println(file.isDirectory());
System.out.println(file.isFile());
//要是父目录没有生成的话 就会报错
System.out.println(file.mkdir());
//即使父目录没有 也会与多级目录一起 一并生成
System.out.println(file.mkdirs());
//List方法 列出当前目录下所有的子文件 以及子目录
String[]names=file.list();
for(String name:names){
System.out.println(name);
}
//listFile方法 返回一个File数组 数组中的每个元素都是一个File对象 这样操作起来更容易
File[]files=file.listFiles();
for(File everyfile:files){
System.out.println(everyfile.getName()); }
//getparent返回父类的File对象(String)
System.out.println(file.getParent());
//获取固定类型的文件 比如固定的后缀的
//法一:使用list方法获取文件名数组 利用endwith判断结尾
String[]names2=file.list();
for(String name:names2){
if(name.endsWith(".java")){
System.out.println(name);
}
} //法二:有点类似于策略模式 主要是实现accept方法 需要先定义一下 FilenameFilter类 这里通过内部类的方式来实现
//在方法的参数声明的地方 直接传入一个类的实例
String[]names3=file.list(new FilenameFilter(){
public boolean accept(File dir,String name){
if(name.endsWith(".java"))
return true;
else
return false;
}
}); //delete方法 用于删除目录 如果目录中包含文件则没法删除
//要是目录中还设有目录 只能通过递归的方式删除(文件操作中常用的技巧)
System.out.println(file.delete());
//自定义deleteall方法 通过递归的方式删除 执行此方法之后filetest2之下 为空
deleteAll(new File("F:\\filetest1\\filetest2")); }
// 删除目录以及其中的文件 (这个是文件操作中比较固定的模式)
public static void deleteAll(File file){
//如果是文件 或者为一个空目录 则删除 这个是递归的出口
if(file.isFile()||file.list().length==0){
file.delete();
return;
}
//往下递归
else{
File[]files=file.listFiles();
for(File f:files){
//递归删除
deleteAll(f);
} } return;
} }

一个比较典型的题目,有的时候面试也会考到的:创建一个当前目录下的目录树,要求每一层目录都有缩进,并且使得目录排在文件的前面

实现如下:

package com.file.filetree;

import java.io.File;
import java.util.ArrayList; public class fileTree {
public static void main(String[]args){ File directory=new File("F:\\test");
traverse(directory,0);
} //n表示空格的个数
public static void Print(String str,int n){
//先打印换行符
System.out.print('\n');
int i;
for(i=0;i<n;i++)
{System.out.print(" ");}
System.out.print(str);
return; } //最简单的排序思路 遍历两次 第一次把目录文件放入 第二次把文件放入
public static File[] sort(File[] files){
ArrayList<File>sorted=new ArrayList<File>();
for(File f:files){
if(f.isDirectory()){
sorted.add(f);
}
}
//再遍历一次 把文件放入
for(File f:files){
if(f.isFile()){
sorted.add(f);
}
}
//将一个Arraylist转化为一个File数组
//方法是先声明一个对应长度的File类型的数组空间 再将这个Arraylist中的内容由toArray方法赋给数组
File[]newfiles=new File[sorted.size()];
sorted.toArray(newfiles);
return newfiles; } //递归遍历目录
public static void traverse(File file,int n){ File[]files =file.listFiles();
//当前为文件 或者为空目录 打印 这个判断条件基本上是类似的问题中常常遇到的
if(file.isFile()||files.length==0)
{
Print(file.getName(),n);
return;
}
else
{
//先对当前的File对象排一下序 目录放前面 文件放后面
files=sort(files);
//如果当前是一个非空的目录 先把当前目录打印了 再递归
Print(file.getName(),n);
for(File f:files){
traverse(f,n+20);
} } } }

缩进的实现主要是通过对前面输出的空格数目进行控制,对于每一层来说,在输出文件名之前都要输出对应数目的空格。先文件夹,后文件的输出方式也是通过对每一层的非空目录进行简单的排序来实现的。

Java IO(1)的更多相关文章

  1. java.IO输入输出流:过滤流:buffer流和data流

    java.io使用了适配器模式装饰模式等设计模式来解决字符流的套接和输入输出问题. 字节流只能一次处理一个字节,为了更方便的操作数据,便加入了套接流. 问题引入:缓冲流为什么比普通的文件字节流效率高? ...

  2. Java:IO流与文件基础

    Java:IO流与文件基础 说明: 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列的对象 ...

  3. Java IO之字符流和文件

    前面的博文介绍了字节流,那字符流又是什么流?从字面意思上看,字节流是面向字节的流,字符流是针对unicode编码的字符流,字符的单位一般比字节大,字节可以处理任何数据类型,通常在处理文本文件内容时,字 ...

  4. java Io流向指定文件输入内容

    package com.hp.io; import java.io.*; public class BufferedWriterTest{ public static void main(String ...

  5. java Io文件输入输出流 复制文件

    package com.hp.io; import java.io.FileInputStream; import java.io.FileNotFoundException; import java ...

  6. java Io流更新文件内容

    package com.hp.io; import java.io.FileOutputStream; import java.io.IOException; public class FileOut ...

  7. java IO流详解

    流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...

  8. java.io.NotSerializableException: test.io.file.Student

    java.io.NotSerializableException: test.io.file.Student    at java.io.ObjectOutputStream.writeObject0 ...

  9. java.io.IOException: mark/reset not supported

    java.io.IOException: mark/reset not supported at java.io.InputStream.reset(InputStream.java:348) at ...

  10. Java IO流学习总结

    Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...

随机推荐

  1. Delphi Unicode学习

    String.AnsiString及Tbytes之间的转换一.string转为AnsiString1.直接赋值 (有警告)2.AnsiString()类型强制转换.(无警告) 二.AnsiString ...

  2. vue中的scope

    在vue文件中的style标签上,有一个特殊的属性:scoped. 当一个style标签拥有scoped属性时,它的CSS样式就只能作用于当前的组件,也就是说,该样式只能适用于当前组件元素. 通过该属 ...

  3. HTML导航框架实现

    导航栏界面(html_contents.html) <!DOCTYPE html> <html> <head> <meta charset=” utf-8” ...

  4. 遍历并读取指定目录下的所有文件内容,写入Map集合然后输出在控制台和本地文件

    public class FileWrite { public static void main(String[] args) throws Exception { //封装数据源目录 File sr ...

  5. 2018-8-27-C#-powshell-调用

    title author date CreateTime categories C# powshell 调用 lindexi 2018-8-27 16:20:4 +0800 2018-06-18 20 ...

  6. 2、Jmeter测试

    一.测试流程 1.添加本次测试计划 (右键-->添加-->Threads(Users)-->线程组) 2.设置线程数 (所谓线程数就是并发用户数) 3.在线程组内添加请求(右键--& ...

  7. 基于celery的任务管理

    1.celery基本原理 Celery是一个由python编写的简单.灵活.可靠的用来处理大量信息的分布式系统,同时提供了操作和维护分布式系统所需要的工具,说白了就是一个用来管理分布式队列的工具. C ...

  8. Django中ifequal 和ifnotequal的使用

    Django中{% ifequal A B %} 用来比较A和B两个值是否相等,{% ifnotequal A B %}` 用来比较A和B两个值是否不相等..如: {% ifequal user cu ...

  9. Java IO方式

    原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11444349.html BIO 传统的java.io包,它基于流模型实现,提供了我们最熟知的一些IO功 ...

  10. No module named flask 导包失败,Python3重新安装Flask模块

    在部署环境过程中,通过pip install -r requirements.txt安装包,结果启动项目时总是报错,显示没有flask模块,通过pip install flask还是不行,于是下载fl ...