——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
一、File类
1,字段和构造方法
public static void constructorDemo() {
//可以封装已存在的,也可以封装不存在的文件或者目录
File f1 = new File("f:\\a.txt");
//用两个字符串初始化文件对象
File f2 = new File("f:\\","a.txt");
//用一个文件对象和一个字符串初始化文件对象
File f = new File("f:\\");
File f3 = new File(f,"a.txt");
/*分割符可以用private static final String FILE_SEPARATOR = System.getProperty("file.separator")
也可以用File.separator*/
File f4 = new File("f:"+File.separator+"abc"+File.separator+"a.txt");
System.out.println(f4);
}
2.File类常见方法
2.1获取。
2.1.1 获取文件名称。String getName()
2.1.2 获取文件路径。
String getAbsolutePath()获取绝对路径字符串(唯一)
File getAbsoluteFile()获取绝对路径的文件(唯一)
String getPath()获取File对象中封装的路径
2.1.3 获取文件大小。
long getLength()
2.1.4 获取文件修改时间。
long time = file.getLastModified()获取file的最后修改时间
Date date = new Date(time);创建日期对象
String str_time = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG).format(date);将日期装成字符串
2.1.5获取空余空间
long getFreeSpace()获取文件空余空间
2.2创建与删除。
boolean creatNewFile()文件存在不创建,不存在就创建。可能抛异常,并停掉程序
boolean mkdir()创建单级目录
boolean mkdirs()创建多级目录
boolean delete()删除文件不走回收站,不能删除有内容文件的文件夹
2.3判断。
boolean exists()判断是否存在,才能判断是文件还是文件夹
boolean isFile()是不是文件
boolean isDirectory()是不是文件夹
boolean isHidden()判断文件是否隐藏
3.重命名
boolean renameTo(File dest)重新命名此抽象路径名表示的文件。
public static void renameToDemo() {
File f1 = new File("c:\\9.mp3");
File f2 = new File("d:\\aa.mp3");
//将c盘f1中的9.mp3文件重命名为aa.mp3,并剪切到d盘
boolean b = f1.renameTo(f2);
System.out.println("b="+b);
}
4.列举
4.1列举文件名称
String [] list()只列举文件中的文件夹名称或文件名(包括隐藏的)
注意:当文件夹不存在(封装的文件夹不存在,封装的是文件),返回的数组为空,应判断;如果文件夹存在但无内存,
结果是长度为0的字符串数组
File file = new File("c:\\");
String [] names = file.list();
//判断数组是否为空
if (names != null) {
for (String name : names) {
System.out.println(name);
}
}
4.2列举文件对象
File [] listFiles()列出的文件对象,就可以获取名称,路径,大小等等
File file = new File("c:\\");
File [] ffs = file.listFiles();
if(ffs != null) {
for(File ff : ffs) {
System.out.println(ff.getName()+"..."+ff.getFreeSpace());
}
}
4.3过滤器(文件名过滤器和文件过滤器)
public class Demo{
public static void main(String [] args) {
File file = new File("c:\\");
//过滤出以".txt"结尾的文件名
String [] names = file.list(new SuffixFilter(".txt"));
//判断数组是否为空
if (names != null) {
for (String name : names) {
System.out.println(name);
}
}
}
}
//创建一个文件名过滤器
class SuffixFilter implements FilenameFilter {
private String suffix;
//构造函数
public SuffixFilter (String suffix) {
super();
this.suffix = suffix;
}
public boolean accept(File dir, String name){
return name.endsWith(suffix);
}
}
//创建一个文件过滤器
class FilterByFile implements FileFilter {
public boolean accept(File pathname) {
//
return pathname.isFile();
}
}
4.4列出有效盘的根
static File[] listRoots()列出可用的文件系统根
5.应用
需求1:变量指定目录中的所有文件夹和文件名称(包含子目录)
import java.io.*;
class FileDemo3 {
public static void main(String[] args)
{
File dir = new File("e:\\java练习");
showDir(dir);
}
public static String getLevel(int level)
{
StringBuilder sb = new StringBuilder();
sb.append("|--")
for(int x=0;x<level;x++)
{
sb.insert(0," ")
}
return sb.toString();
}
public static void showDir(File dir,int level)
{
System.out.println(getLevel(level)+dir.getName());
level++;
File[] files = dir listFiles();
for(int x=0;x<files.length;x++)
{
if(files[x].isDirectory())
showDir[Files[x,level]]
else
System.out.println(getLevel(level)files[x])
}
}
}
需求2:删除指定目录中的所有文件和文件夹
import java.io.*;
class RemoveDir {
public static void main(String[] args)
{
File dir = new File("E:\\TEST")
removerDir(dir);
}
public static void removeDir(File dir)
{
File[] files = dir.listFiles();
for(int x=0;x<files.length;x++)
{
if(files[x].isDirectory())
removeDir(files[x]);
eles
//files[x].delete();
System.out.println(files[x].toString()+"::"+files[x].delete());
}
System.out.println(dir+":dir:"+dir.delete());
}
}
二、IO流
IO:用于处理设备上数据的技术,设备包括:内存,硬盘光盘等等;
流:系统资源,windows系统本身就可以操作设备,各种语言只是使用系统平台上的这个资源,并对外提供了各种语言自己的操作功能,这些功能最终调用的是系统资源。使用完资源一定要释放资源。
流的分类:按操作数据分为字节流和字符流;按流向分为输入流(读)和输出流(写)
1.字节输入输出流
1.1将数据写入文件中使用FileOutputStream
思路:
1)创建输出流对象,并明确数据存储的目的地,如果目的地不存在,就创建;如果存在就覆盖
2)调用输出流的写功能,
3)关闭资源
public class IOExceptionDemo {
public static void main(String[] args) {
File file = new File("templefile");
if(!file.exists()) {
file.mkdir();
}
//使得fos变量在下面try,catch,finally块中都有效
FileOutputStream fos = null;
try {
//创建输出流
fos = new FileOutputStream("templefile\\fos.txt");
fos.write("abcde".getBytes());
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
//如果创建输出流对象失败,又调用close()就会出现空指针异常
if(fos != null) {
fos.close();
}
} catch (IOException e) {
//资源关闭失败转换后抛出运行异常
throw new RuntimeException("程序已失败"+e);
}
}
}
}
补充:
1)如果想要在前一个文件中续写字符串需要修改输出流对象初始化
fos = new FileOutputStream(“templefile\fos.txt”,true);
2)如果要换行续写,需要修改输出流对象初始化,和写出语句
private static final String LINE_SEPARAOR = System.getProperty(“line.separator”);
fos = new FileOutputStream(“templefile\fos.txt”,true);
String str = LINE_SEPARATOR+”hello”;
fos.write(str.getBytes());
1.2 将已有文件的数据读取出来
思路:
1)创建文件输入流对象,并关联数据资源
2)调用read(byte [])方法循环读取数据
3)关闭资源
public static void main(String[] args) {
File file = new File("templefile");
if(!file.exists()) {
throw new RuntimeException("要读的文件不存在");
}
FileInputStream fis = null;
try {
fis = new FileInputStream(file);
//创建字节数组,
byte [] buf = new byte [1024];
int len = 0;
//将读取的字节存入字节数组中,返回存入的字节总数,循环读取
while((len = fis.read(buf)) != -1) {
//将字节数组转成字符串打印
System.out.println(len+"..."+new String(buf,0,len));
}
} catch (Exception e) {
//将异常写入到日志文件中,进行记录
}finally {
try {
if(fis != null) {
fis.close();
}
} catch (IOException e) {
//一般抛出运行异常,或者写的日志文件中
throw new RuntimeException("程序已停止"+e);
}
}
}
1.3复制文件
思路:
1)创建输入流对象,并和源数据关联
2)创建输出流对象,并通过输出流创建一个目的
3)调用read(byte [])方法存储到字节数组中,然后调用write()方法写出,循环读写
4)关闭资源
public static void main(String[] args) {
File file = new File("templefile");
if(!file.exists()) {
throw new RuntimeException("要读的文件不存在");
}
FileInputStream fis = null;
FileOutputStream fos = null;
try {
fis = new FileInputStream(file);
fos = new FileOutputStream("f:\\abc");
//定义一个字节缓冲区
byte [] buf = new byte [1024];
int len = 0;
//循环读写
while((len = fis.read(buf)) != -1) {
fos.write(buf, 0, len);
}
} catch (IOException e) {
// 将异常写入日志中
} finally {
if(fis != null) {
try {
fis.close();
} catch (IOException e) {
throw new RuntimeException("程序已停止"+e);
}
}
if(fos != null) {
try {
fos.close();
} catch (IOException e) {
throw new RuntimeException("程序已停止"+e);
}
}
}
}
2字节流与字符流的桥梁
2.1字节流到字符流
需求1:字节流转换成字符流,读中文非常方法便
思路:
1).创建字节输入流,明确关联的源数据
2)利用字节流创建字符流,
3)一个字符一个字符地读取
4)关闭字符流
public static void main(String[] args) {
File file = new File("templefile\\fos.txt");
if(!file.exists()) {
throw new RuntimeException("要读的文件不存在");
}
FileInputStream fis = null;
InputStreamReader isr = null;
try {
fis = new FileInputStream(file);
isr = new InputStreamReader(fis);
int len = 0;
//循环地一个字符一个字符地读取
while((len = isr.read()) != -1) {
System.out.println((char)len);
}
} catch (IOException e) {
//异常写入日志
}finally{
if(isr != null) {
try {
isr.close();
} catch (IOException e) {
throw new RuntimeException("程序已停止"+e);
}
}
}
}
需求2:字符流向字节流转换
思路:
1)创建字节输出流 ,明确目的地
2)使用字节流创建字符流
3)调用字符流的方法输出,用flush()刷新,可以继续使用流;用close()刷新后,关闭流
public static void main(String[] args) {
File file = new File("templefile\\fos.txt");
if(!file.exists()) {
try {
file.createNewFile();
} catch (IOException e) {
throw new RuntimeException("路径有误"+e);
}
}
FileOutputStream fos = null;
OutputStreamWriter osw = null;
try {
fos = new FileOutputStream(file,true);
osw =new OutputStreamWriter(fos);
//直接写中文字符串,查表并把数据存储到缓冲区中,所有要刷新
osw.write("你好啊!");
osw.flush();
osw.write("我hen好!");
osw.flush();
} catch (IOException e) {
// 异常写入日志
} finally {
if(osw != null) {
try {
osw.close();
} catch (IOException e) {
throw new RuntimeException("程序已停止"+e);
}
}
}
}
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-