文件与流

JAVA中的文件及目录处理类

在Java中提供了操作文件及目录(即我们所说的文件夹)类File。有以下几点注意事项:

(1)不论是文件还是目录都使用File类操作;

(2)File类只提供操作文件及目录的方法,并不能访问文件的内容,所以他描述的是文件本身的属性;

(3)如果要访问文件本身,用到了我们下面要学习的IO流.

一:构造方法

File 文件名/目录名 = new File("文字路径字符串");

在Java中提供了几种创建文件及目录的构造方法,但大体上都是用参数中的文字路径字符串来创建。

二:一般方法

(1)文件检测相关方法

boolean isDirectory():判断File对象是不是目录

boolean isFile():判断File对象是不是文件

boolean exists():判断File对象对应的文件或目录是不是存在

(2)文件操作的相关方法

boolean createNewFile():路径名指定的文件不存在时,创建一个新的空文件

boolean delete():删除File对象对应的文件或目录

(3)目录操作的相关方法

boolean mkdir():单层创建空文件夹

boolean mkdirs():多层创建文件夹

File[] listFiles():返回File对象表示的路径下的所有文件对象数组

(4)访问文件相关方法

String getName():获得文件或目录的名字

String getAbsolutePath():获得文件目录的绝对路径

String getParent():获得对象对应的目录的父级目录

long lastModified():获得文件或目录的最后修改时间

long length() :获得文件内容的长度

目录的创建

public class MyFile {
public static void main(String[] args) {
//创建一个目录
File file1 = new File("d:\test");
//判断对象是不是目录
System.out.println("是目录吗?"+file1.isDirectory());
//判断对象是不是文件
System.out.println("是文件吗?"+file1.isFile());
//获得目录名
System.out.println("名称:"+file1.getName());
//获得相对路径
System.out.println("相对路径:"+file1.getPath());
//获得绝对路径
System.out.println("绝对路径:"+file1.getAbsolutePath());
//最后修改时间
System.out.println("修改时间:"+file1.lastModified());
//文件大小
System.out.println("文件大小:"+file1.length());
}
}
程序首次运行结果:

是目录吗?false
是文件吗?false
名称:test
相对路径:d:\test
绝对路径:d:\test
修改时间:0
文件大小:0
file1对象是目录啊,怎么在判断“是不是目录”时输出了false呢?这是因为只是创建了代表他是目录的对象,还没有真正的创建,这时候要用到mkdirs()方法,如下:

public class MyFile {
    public static void main(String[] args) {
        //创建一个目录
        File file1 = new File("d:\\test\\test");
        file1.mkdirs();//创建了多级目录
        //判断对象是不是目录
        System.out.println("是目录吗?"+file1.isDirectory());     
    }
}

文件的创建

public class MyFile {
    public static void main(String[] args) {
        //创建一个文件
        File file1 = new File("d:\\a.txt");
                                                                                                                                                                                                                                                                
        //判断对象是不是文件
        System.out.println("是文件吗?"+file1.isFile());  
    }
}
首次运行结果:

是文件吗?false
同样会发现类似于上面的问题,这是因为只是代表了一个文件对象,并没有真正的创建,要用到createNewFile()方法,如下
public class MyFile {
    public static void main(String[] args) {
        //创建一个文件对象
        File file1 = new File("d:\\a.txt");
        try {
            file1.createNewFile();//创建真正的文件
        } catch (IOException e) {
            e.printStackTrace();
        }
        //判断对象是不是文件
        System.out.println("是文件吗?"+file1.isFile());  
    }
}

文件夹与文件的创建目录

文件时存放在文件夹下的,所以应该先创建文件夹,后创建文件,如下:

public class MyFile {
    public static void main(String[] args) {
        //代表一个文件夹对象,单层的创建
        File f3 = new File("d:/test");
        File f4 = new File("d:/test/a.txt");
        f3.mkdir();//先创建文件夹,才能在文件夹下创建文件
        try {
            f4.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
        }
                                                                                                                                                                   
        //代表一个文件夹对象,多层的创建
        File f5= new File("d:/test/test/test");
        File f6 = new File("d:/test/test/test/a.txt");
        f5.mkdirs();//多层创建
        try {
            f6.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

运行结果为,在D磁盘的test文件夹下有一个a.txt,在D磁盘的test/test/test下有一个a.txt文件。

编程:判断是不是有这个文件,若有则删除,没有则创建

public class TestFileCreatAndDele {
    public static void main(String[] args) {
        File f1 = new File("d:/a.txt");
        if(f1.exists()){//文件在吗
            f1.delete();//在就删除
        }else{//不在
            try {
                f1.createNewFile();//就重新创建
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

文件的逐层读取

File的listFiles()只能列出当前文件夹下的文件及目录,那么其子目录下的文件及目录该如何获取呢?解决的办法有很多,在这运用递归解决.

//逐层获取文件及目录

public class TestFindFile {
    public static void openAll(File f) {// 递归的实现
        File[] arr = f.listFiles();// 先列出当前文件夹下的文件及目录
        for (File ff : arr) {
            if (ff.isDirectory()) {// 列出的东西是目录吗
                System.out.println(ff.getName());
                openAll(ff);// 是就继续获得子文件夹,执行操作
            } else {
                // 不是就把文件名输出
                System.out.println(ff.getName());
            }
        }
    }
    public static void main(String[] args) {
        File file = new File("d:/test");// 创建目录对象
        openAll(file);// 打开目录下的所有文件及文件夹
    }
}

输入——>java程序———>输出

字节输入流(FileInputStream)

package FileDemo;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.lang.reflect.Array;
import java.util.Arrays;

/**
 * Created by ttc on 18-1-14.
 */
public class FileInputStreamDemo {
    public static void main(String[] args) throws Exception {
//        创建源,挖井
        File f=new File("e:/hu/wo.txt");
        InputStream ff=new FileInputStream(f);
        int a=ff.read();
        int index=0;
        byte[] bytes=new byte[10];
        while (a!=-1)
        {
            bytes[index++]=(byte) a;
            a=ff.read();
        }
        String str=new String(bytes,0,3);
        System.out.println(str);

//        System.out.println(a);
//        System.out.println(ff.read());
//
//        int b=ff.read(bytes,0,3);
//        System.out.println(b);
//        for(byte v:bytes)
//        {
//            System.out.println(v);
//        }
//
    }
}

复制文件

package FileDemo;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

/**
 * Created by ttc on 18-1-15.
 */
public class copyFile {
    public static void main(String[] args) throws Exception {
        File files=new File("d:/d.txt");
        FileInputStream fileInputStream=new FileInputStream(files);
        FileOutputStream fileOutputStream=new FileOutputStream("e:/bbat.txt");
        byte[] buffer=new byte[500];
        int count=fileInputStream.read(buffer);
        while (count!=-1)
        {
            System.out.println(count);
            fileOutputStream.write(buffer,0,count);
            count=fileInputStream.read(buffer);
        }
        fileInputStream.close();
        fileOutputStream.close();
    }
}

字符输入流(FileReader)

package FileDemo;

import java.io.*;

/**
 * Created by ttc on 18-1-15.
 */
public class FileReaderDemo {
    public static void main(String[] args) throws Exception {
//        FileReader fileReaders=new FileReader("d:/d.txt");
//        char[] arr=new char[100];
//        int len=fileReaders.read(arr);
//        StringBuffer sb=new StringBuffer();
//        while (len!=-1)
//        {
//          sb.append(arr);
//          len=fileReaders.read(arr);
//        }
//        System.out.println(sb.toString());
//    }
      FileReader fileReaders=new FileReader("d:/d.txt");
        BufferedReader br=new BufferedReader(fileReaders);
        StringBuilder sb=new StringBuilder();
        String str=br.readLine();                                    
        while (str!=null)
        {
            sb.append(str);
            sb.append("\n");
            sb.append("\r") ;
            str=br.readLine();
        }
        System.out.println(sb.toString());


    }
}

递归求当前目录下的文件及子文件行数

package FileDemo;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;

/**
 * Created by ttc on 18-1-15.
 */
public class calcuLine {
    public static int openAll(File file) throws Exception {
        int num=0;
        File[] ff=file.listFiles();
        for(File f:ff)
        {
            if(f.isFile())
            {
                FileReader fr=new FileReader(f);
                BufferedReader br=new BufferedReader(fr);
                String str=br.readLine();
                while (str!=null)
                {
                    str=br.readLine();
                    num++;
                }
            }
            else
            {
                openAll(f);
            }
        }
        return num;
    }

    public static void main(String[] args) throws Exception {
        File files =new File("D:\\File\\src\\FileDemo");
        int num=openAll(files);
        System.out.println(num);
    }
}

格式模版保存在文本文件pet.template中,内容如下:
您好!
我的名字是{name},我是一只{type}。
我的主人是{master}。
其中{name}、{type}、{master}是需要替换的内容,现在要求按照模板格式保存宠物数据到文本文件,即把{name}、{type}、{master}替换为具体的宠物信息,该如何实现呢?

实现思路
1.创建字符输入流BufferedReader对象
2.创建字符输出流BufferedWriter对象

建StringBuffer对象sbf,用来临时存储读取的
数据
通过循环实现文件读取,并追加到sbf中
使用replace()方法替换sbf中的内容
将替换后的内容写入到文件中
关闭输入流、输出流

package FileDemo;

import java.io.*;

/**
 * Created by ttc on 18-1-15.
 */
public class strReplace {
    public static void main(String[] args) throws Exception {
        Reader fr=new FileReader("C:\\Documents and Settings\\ttc\\feiq\\Recv Files/email.txt");
        BufferedReader br=new BufferedReader(fr);
        String str=br.readLine();
        StringBuilder sb=new StringBuilder();
        while (str!=null)
        {
            sb.append(str);
            str=br.readLine();
        }
//        System.out.println(sb.toString());
        String str1=sb.toString();
        email e=new email();
        e.setTo("妈妈");
        e.setContent("i love y");
        e.setFrom("woya");
        str1=str1.replace("{to}",e.getTo());
        str1=str1.replace("{content}",e.getContent());
        str1=str1.replace("{from}",e.getFrom());
//        System.out.println(str1);
        FileWriter fw=new FileWriter("d:/aaa.txt");
        BufferedWriter bw=new BufferedWriter(fw);
        bw.write(str1);
        bw.flush();
        br.close();
        bw.close();
        fw.close();



    }
}
package FileDemo;

/**
 * Created by ttc on 18-1-15.
 */
public class email {
    private  String to;
    private  String content;
    private String from;

    public String getTo() {
        return to;
    }

    public void setTo(String to) {
        this.to = to;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public String getFrom() {
        return from;
    }

    public void setFrom(String from) {
        this.from = from;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,686评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,668评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,160评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,736评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,847评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,043评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,129评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,872评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,318评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,645评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,777评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,861评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,589评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,687评论 2 351

推荐阅读更多精彩内容

  • 什么是文件? 文件可认为是相关记录或放在一起的数据的集合 文件一般存储在哪里? JAVA程序如何访问文件属性? j...
    __豆约翰__阅读 1,365评论 0 5
  • 什么是文件? 文件可认为是相关记录或放在一起的数据的集合 文件一般存储在哪里? JAVA程序如何访问文件属性? j...
    蛋炒饭_By阅读 677评论 0 0
  • 什么是文件? 文件可认为是相关记录或放在一起的数据的集合 JAVA程序如何访问文件属性? JAVA中的文件及目录处...
    十一_2bef阅读 408评论 0 0
  • 什么是文件? 文件可认为是相关记录或放在一起的数据的集合 文件一般存储在哪里? JAVA程序如何访问文件属性? j...
    piziyang12138阅读 379评论 0 0
  • 日出日落是很多摄影爱好者与游客非常喜欢看的风风,但事实上由于天气原因可遇不可求。今天请大家随意一起来看看海子湾的日...
    尘飞扬兮阅读 1,498评论 0 5