详谈JAVA中的file类与IO流
File类
位置于java.io包
构造方法:
File(String parent, String child)
new file(“d:\\”,”a.txt”)
File(String pathname)
new file(“d:\\a.txt”)
File(File parent, String child)
File f = new File(“d:\\”);
File f1=new File(f,”a.txt”)
常用方法:
1.获取
1)文件名
String getName()
2)文件路径
String getAbsolutePath()
3)大小
long length()
3)最后个修改时间
long lastModified()
File file = new File("d:\\aa.txt");
System.out.println(file.getName());
System.out.println(file.getAbsolutePath());
System.out.println(file.lastModified());
long l = file.lastModified();
Date date= new Date(l);
System.out.println(date.toString());
System.out.println(file.length());
2.创建与删除
1)创建文件
boolean createNewFile()
2)创建文件夹(目录)
boolean mkdir() 单层
boolean mkdirs() 多层
3)删除文件和目录
boolean delete()
File f= new File("d:\\b.txt");
boolean b = f.createNewFile();
System.out.println(b);
f.delete();
File f1= new File("d:\\ch1027");
f1.mkdir();
File f2= new File("d:\\ch1028\\ch1029\\ch1030");
f2.mkdirs();
File f2= new File("d:\\ch1028\\ch1029\\ch1030");
System.out.println(f2.delete());
3.判断
boolean isDirectory() 测试此抽象路径名表示的文件是否是一个目录。
boolean isFile() 测试此抽象路径名表示的文件是否是一个标准文件。
boolean isHidden() 测试此抽象路径名指定的文件是否是一个隐藏文件。
File f1=new File("d:\\ch1027");
System.out.println(f1.isDirectory());
System.out.println(f1.isFile());
File f= new File("d:\\bb.txt");
boolean b = f.createNewFile();
System.out.println(f.isHidden());
4.重命名
boolean renameTo(File dest)
1)同目录 ---- 改名
2)不同目录 ----- 相当于剪切
File f= new File("f:\\bb6.txt");
File f1= new File("f:\\123\\bb6.txt");
System.out.println(f.renameTo(f1));
5.其它
static File[] listRoots() 列出可用的文件系统根。
long getFreeSpace() 可用空间
long getTotalSpace() 总容量
String[] list() 列出目录中的文件和目录(同辈目录)
File[] files = File.listRoots();
for(int i=0;i<files.length;i++){
System.out.println(files[i]);
}
File f= new File("f:\\");
System.out.println(f.getFreeSpace());
System.out.println(f.getTotalSpace());
File f= new File("f:\\123");
String [] strs = f.list();
for(int i=0;i<strs.length;i++){
System.out.println(strs[i]);
}
FileFilter接口
文件过滤器
例子:显示出某个目录下的,非隐藏文件
File[] listFiles(FileFilter filter)
参数是一个过滤器类
详见下面程序
public class FilteHidden implements FileFilter{
public boolean accept(File file) {
return !file.isHidden();
}
}
public class Filess {
public static void main(String[] args) {
File file = new File("f:\\123");
File [] s = file.listFiles(new FilteHidden());
for(int i=0;i<s.length;i++){
System.out.println(s[i].getName());
}
}
}
FilenameFilter 接口
文件名过滤器
例子:对文件名进行过滤
File[] listFiles(FilenameFilter filter)
参数是一个过滤器类
详见下面程序
public class Filename implements FilenameFilter{
private String endstr;
public boolean accept(File dir, String name) {
return name.endsWith(endstr);
}
Filename(String str){
endstr = str;
}
}
public class FilenameDemo {
public static void main(String[] args) {
File file= new File("f:\\123");
File [] files = file.listFiles(new Filename(".txt"));
for(int i=0;i<files.length;i++){
System.out.println(files[i].getName());
}
}
}
File类 得到文件列表的方法
1)列出所有文件
File file = new File(“f:\\aa”);
File [] filearr = file.listFiles(); 表示的目录中的(文件及目录)
String [] filearr= file.list(); 表示的目录中的(文件及目录)
2)过滤器
File file = new File(“f:\\aa”);
FilenameFilter接口,用于过滤文件名。
String[] filenamearr= file.list(FilenameFilter filter)
File[] filenamearr = file.listFiles(FilenameFilter filter)
File file = new File(“f:\\aa”);
FileFilter接口,用于过滤文件。
File[] filearr = file.listFiles(FileFilter filter)
递归:自已(方法)调用自已
例子:用递归把目录下所有的目录及文件全部显示出来
public class B {
public static void main(String[] args) {
File file = new File("f:\\123");
listAllFile(file);
}
public static void listAllFile(File file) {
File[] strs = file.listFiles();
for (int i = 0; i < strs.length; i++) {
// 是不是目录strs[i]
if (strs[i].isDirectory()) {
listAllFile(strs[i]);
System.out.println("目录="+strs[i].getName());
} else {
System.out.println("文件名="+strs[i].getName());
}
}
}
}
IO流
IO流:输入(Input)输出(Output)流
位置于java.io包下
流作用:读取文件用的
流分类
1)按流向分(以内存为参照物):
输入流 输出流
2)按流的内容分:
字节流(能读写所有文件),字符流(读取纯文本文件)
3)按功能分:
节点流 处理流(套在节点流上的)
字节流,它的子类都是Stream
字符流,它的子类是Writer Reader
FileWriter
文件字符输出流
构造方法:
注意:1)对象一创建出来就得给文件路径。
2)如果文件存在就覆盖,不存在则创建
3)不想覆盖,是用
FileWriter(String fileName, true)
4)写完后要flush()
5)写完要关闭流
FileReader
文件字符输入流
代码:
1)
FileWriter fw = new FileWriter("d:\\1.txt");//文件有覆盖,没有则创建
fw.write("abc");
fw.flush();
fw.close(); 关闭后不能在写入
2)
public static void main(String[] args) {
try {
FileReader fr = new FileReader("f:\\1.txt");
int ch=0;
while( (ch=fr.read())!=-1 ){ 读到最后返回值为-1
System.out.println((char)ch);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
3)
public static void main(String[] args) {
try {
FileReader fr = new FileReader("f:\\1.txt");
char[] buf= new char[3];
int i = fr.read(buf);
System.out.println(new String(buf,0,i));
//new String(buf,0,i) char [] buf,从char数组的第几个位置开始读,读几个
int i1 = fr.read(buf);
System.out.println(new String(buf,0,i1));
} catch (Exception e) {
e.printStackTrace();
}
}
4)
public class FileWriterDemo {
public static void main(String[] args) {
FileWriter fw = null;
try {
fw = new FileWriter("d:\\1.txt");
fw.write("fff");
fw.write("ggggg");
fw.flush();
int i = 10/0;
} catch (Exception e) {
String str = e.getMessage();
FileWriterDemo d = new FileWriterDemo();
d.xie(str);错误信息写入另一个文件中。
e.printStackTrace();
} finally {
try {
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void xie(String str) {
FileWriter fw = null;
try {
fw = new FileWriter("d:\\2.txt", true);
fw.write(str);
fw.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
BufferedWriter 带缓冲区的文件字符输出流
特点:1)它是处理流,要包在节点流外面来使用
2)提高写的效率
3)换行newLine()
创建对象:
1)FileWriter fw = new FileWriter("d:\\cc\\cc.txt");
BufferedWriter bw = new BufferedWriter(fw);
2)没有捕获异常时
BufferedWriter bw1 = new BufferedWriter(new FileWriter("d:\\cc\\cc3.txt"));
bw1.write("abcbbbb");
bw1.newLine();
bw1.write("sssss");
bw1.newLine();
bw1.write("defxxx");
bw1.flush();
bw1.close();
BufferedReader 带缓冲区的文件字符输入流
特点:1)它是处理流,要包在节点流外面来使用
2)提高读取的效率
3)读一行readLine()
创建对象:
try {
BufferedReader br= new BufferedReader(new FileReader("d:\\cc\\cc.txt"));
String str=null;
while( (str=br.readLine()) != null){
System.out.println(str);
}
} catch (Exception e) {
e.printStackTrace();
}
文件的复制:
public static void main(String[] args) {
BufferedReader br = null;
BufferedWriter bw = null;
try {
br = new BufferedReader(new FileReader(new File("d:\\cc\\cc.txt")));
bw = new BufferedWriter(new FileWriter("d:\\cc\\cc5.txt"));
String str = null;
while ((str = br.readLine()) != null) {
bw.write(str);
bw.newLine();
bw.flush();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (bw != null) {
try {
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
FileOutputStream 文件字节输出流
特点:1)输出的是字节
2)不用flush()
创建对象:
public static void main(String[] args) {
FileOutputStream fos=null;
try{
fos = new FileOutputStream("d:\\cc\\cc8.txt");
fos.write("abc".getBytes());
//getBytes()将一个字符串转化为一个字节数组byte[]的方法
fos.write(97);
}catch (Exception e) {
e.printStackTrace();
}finally{
if(fos != null){
try {
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
FileInputStream 文件字节输入流
特点:1)输入的是字节
2)不用flush()
创建对象:
public static void main(String[] args) {
try {
FileInputStream fis = new FileInputStream("d:\\cc\\cc8.txt");
byte [] b = new byte[2];
int len=0;
while( (len =fis.read(b)) != -1){
System.out.println(new String(b,0,len));
}
} catch (Exception e) {
e.printStackTrace();
}
}
BufferedOutputStream BufferedInputStream
带缓冲区的字节输出(输入)流
特点:1)输出(入)的是字节
2)是个处理流
2)用flush()
创建对象:
public static void main(String[] args) {
try {
BufferedInputStream bis= new BufferedInputStream( new FileInputStream("d:\\cc\\cc8.txt"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("d:\\cc\\cc9.txt"));
int len=0;
byte [] b = new byte[1024];
while( (len = bis.read(b)) !=-1 ){
bos.write(b);
}
bos.flush();
} catch (Exception e) {
e.printStackTrace();
}finally{//加close()方法,请参考(文件的复制)}
}
System.in
从键盘输入得到一个流InputStream
用InputStream中的方法
public static void main(String[] args) {
InputStream is = System.in;
int ch = 0;
try {
while ((ch = is.read()) != -1) {
System.out.println((char) ch); // \r 13 \n 10
}
} catch (IOException e) {
e.printStackTrace();
}
}
ObjectInputStream ObjectOutputStream
对象的输入 输出流
特点:1)写入很多数据类型
2)写入自定义对象
序列化:把对象存入硬盘中(属性的值)
反序列化:把对象从硬盘中取出来(属性的值)
注意: 1)static 修饰的属性不能存入
2)Transient修饰的属性不能存入//transient关键字的作用:标记的成员变量不参与序列化过程
3)对象对应的类必须要实现一个接口(空接口)Serializable接口
4)不用flush()
5)类中的方法不能被序列化,只能序列化属性
程序演示:
public static void main(String[] args) {
try {
ObjectOutputStream ous = new ObjectOutputStream(new FileOutputStream(new File("d:\\cc\\Animal.obj")));
Animal a1= new Animal("aa",1);
ous.writeObject(a1);//序列化
ous.close();
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("d:\\cc\\Animal.obj")));
Animal an=(Animal)ois.readObject();//反序列化
System.out.println(an.getAge()+","+an.getName());
Ois.close();
} catch (Exception e) {
e.printStackTrace();
}
}
详谈JAVA中的file类与IO流的更多相关文章
- Java入门之File类和IO流
1.File类 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作 . 构造方法: public File(String pathname) :通过将 ...
- java中的File类
File类 java中的File类其实和文件并没有多大关系,它更像一个对文件路径描述的类.它即可以代表某个路径下的特定文件,也可以用来表示该路径的下的所有文件,所以我们不要被它的表象所迷惑.对文件的真 ...
- JavaSE学习笔记(14)---File类和IO流(字节流和字符流)
JavaSE学习笔记(14)---File类和IO流(字节流和字符流) File类 概述 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. 构造方 ...
- File类与IO流
一.File类与IO流 数组.集合等内容都是把数据放在内存里面,一旦关机或者断电,数据就会立刻从内存里面消失.而IO主要讲文件的传输(输入和输出),把内存里面的数据持久化到硬盘上,如.txt .avi ...
- Java自学第10期——File类与IO流(输入输出流、处理流、转换流、缓冲流、Properties集合、打印流)
1.IO简介 IO(输入输出)通过java.io包下的类和接口来支持,包下包括输入.输出两种IO流,每种输入输出流又可分为字符流和字节流两大类. 2.File类 File类是io包下与平台无关的文件和 ...
- File类以及IO流
1.File类 package LESSON12; import java.io.File; import java.io.IOException; import java.text.SimpleDa ...
- [原创]Java中使用File类的list方法获取一定数量的文件:FilenameFilter接口的特殊用法
前言:有时候我们可能会遇到这样一个问题:需要遍历一个包含极多文件的文件夹,首先想到的肯定是使用File.list()方法,该方法返回一个String[],但是如果文件达到几亿呢?这个时候我们就需要分批 ...
- Java File类与IO流
File 类 java.io.File 文件和目录路径名的抽象表示形式, 对文件或目录进行操作 构造方法: File(File parent, String child) : 根据 parent 抽象 ...
- Java中的File类,递归是什么?
一.IO概述 当需要把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作. 当把持久设备上的数据读取到内存中的这个动作称为输入(读)Input操作. 因此我们把这种输入和输出动作称为 ...
随机推荐
- xml学习_上篇
xml简介: XML 指可扩展标记语言(eXtensible Markup Language). XML 被设计用来传输和存储数据. xml小示例: /************************ ...
- 分享一个低配VPS下运行的mysql配置文件
在各种内存CPU核心只有1/2核,内存只有512M/1G的vps下,内存.CPU.硬盘都不是太充裕.因此主要思路是,禁止吃内存大户innodb引擎,默认使用MyISAM.禁止吃硬盘大户log-bin, ...
- WSDL/WebService/SOAP/REST/AXIS/CXF 开放式服务
WebService是一种数据交换标准.通过WebService标准,你可以把项目中的方法作为接口提供给其他项目使用. 有时候我们习惯性地将具体提供服务的某个方法称为WebService.比如图书系统 ...
- Java中一个方法只被一个线程调用一次
1.想在运行时抛出异常,终止方法的运行 private final Set<Long> THREADS = new HashSet<>(); public void someM ...
- poj 2155 Matrix (二维树状数组)
题意:给你一个矩阵开始全是0,然后给你两种指令,第一种:C x1,y1,x2,y2 就是将左上角为x1,y1,右下角为x2,y2,的这个矩阵内的数字全部翻转,0变1,1变0 第二种:Q x1 y1,输 ...
- ConcurrentHashMap总结
线程不安全的HashMap 因为多线程环境下,使用HashMap进行put操作会引起死循环,导致CPU利用率接近100%,所以在并发情况下不能使用HashMap,如以下代码 final HashM ...
- android布局中画线的方法
1.自定义View画线 http://fariytale.iteye.com/blog/1264225 下面介绍几种简单的方法 2.textView和View画直线 <TextView andr ...
- 微信小程序获取html内容后展示(C#)
使用场景:微信小程序 具体功能:从服务器获取文章内容 展示在小程序里 使用语言: C# -------------------------------------------------------- ...
- IT职场经纬 |阿里web前端面试考题,你能答出来几个?
有很多小伙伴们特别关心面试Web前端开发工程师时,面试官都会问哪些问题.今天小卓把收集来的"阿里Web前端开发面试题"整理贴出来分享给大家伙看看,赶紧收藏起来做准备吧~~ 一.CS ...
- CF #CROC 2016 - Elimination Round D. Robot Rapping Results Report 二分+拓扑排序
题目链接:http://codeforces.com/contest/655/problem/D 大意是给若干对偏序,问最少需要前多少对关系,可以确定所有的大小关系. 解法是二分答案,利用拓扑排序看是 ...