Java IO(1)
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)的更多相关文章
- java.IO输入输出流:过滤流:buffer流和data流
java.io使用了适配器模式装饰模式等设计模式来解决字符流的套接和输入输出问题. 字节流只能一次处理一个字节,为了更方便的操作数据,便加入了套接流. 问题引入:缓冲流为什么比普通的文件字节流效率高? ...
- Java:IO流与文件基础
Java:IO流与文件基础 说明: 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列的对象 ...
- Java IO之字符流和文件
前面的博文介绍了字节流,那字符流又是什么流?从字面意思上看,字节流是面向字节的流,字符流是针对unicode编码的字符流,字符的单位一般比字节大,字节可以处理任何数据类型,通常在处理文本文件内容时,字 ...
- java Io流向指定文件输入内容
package com.hp.io; import java.io.*; public class BufferedWriterTest{ public static void main(String ...
- java Io文件输入输出流 复制文件
package com.hp.io; import java.io.FileInputStream; import java.io.FileNotFoundException; import java ...
- java Io流更新文件内容
package com.hp.io; import java.io.FileOutputStream; import java.io.IOException; public class FileOut ...
- java IO流详解
流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...
- java.io.NotSerializableException: test.io.file.Student
java.io.NotSerializableException: test.io.file.Student at java.io.ObjectOutputStream.writeObject0 ...
- java.io.IOException: mark/reset not supported
java.io.IOException: mark/reset not supported at java.io.InputStream.reset(InputStream.java:348) at ...
- Java IO流学习总结
Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...
随机推荐
- yield-Python大牛必须掌握的高端语法
小白:大牛哥,刚才看到有一个函数不使用return返回结果,而是使用yield关键字返回结果,看不太明白,Python中yield关键字的用途是什么,它有什么作用呀? 大牛: 要想理解yield的作用 ...
- Pandas 时间序列处理
目录 Pandas 时间序列处理 1 Python 的日期和时间处理 1.1 常用模块 1.2 字符串和 datetime 转换 2 Pandas 的时间处理及操作 2.1 创建与基础操作 2.2 时 ...
- HDU_2007
/** *注意:输入的两个数字的大小并不确定 */ #include <iostream> #include <stdio.h> #include <string.h&g ...
- NGUI的HUD Text的扩展插件学习--(UIFollowTarget)的使用
一,我们先导入NGUI_HUD_Text_v1.11包,导入包后会在项目生成一个这样的文件夹 二,我们添加一个cube,给cube添加一个空的游戏对象 二,我们使添加一个label,然后给label添 ...
- neo4j图形数据库Java应用
CREATE (陈冠希:明星 {名称: "陈冠希"}), (王菲:明星 {名称: "王菲"}), (李亚鹏:明星 {名称: "李亚鹏"}), ...
- JSP学习(4)
JSP学习(4) JavaBean简介 符合某种规范的Java类.使用JavaBean的好处是解决了代码重复编写,减少代码冗余,功能区分明确,提高代码的可维护性 JavaBean设计原则 JSP动作元 ...
- Java虚拟机——类加载机制
转自:http://blog.csdn.net/ns_code/article/details/17881581 类加载过程 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载 ...
- 03scikit-learn非监督学习
In [1]: from sklearn.decomposition import PCA from sklearn.datasets import load_iris pca = PCA(n_com ...
- PTA 错题记录
程设期中考, 记录一下曾经做错的选择填空. 1. 2. 3. 4. 5. 6.
- hdu 4655 Cut Pieces(想法题)
Cut Pieces Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others) Tota ...