栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java I/O流

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java I/O流

I/O流

一.文件在程序中是以流的形式存在的

二.创建文件

代码:

import java.io.File;
import java.io.IOException;


public class newFile {
    public static void main(String[] args) {
        //使用方式一创建
        File file = new File("c:/IO/newFile1.txt");
        try {
            file.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("创建成功");

        //使用方式二创建
        File parentFile = new File("c:/IO");
        File child = new File(parentFile,"file2.txt");
        try {
            child.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("创建成功");

        //使用方式三创建
        File file3 = new File("c:/IO","file3.txt");
        try {
            file3.createNewFile();
            System.out.println("创建成功");
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

注意事项:

1.目录分隔符可以用 / 也可以用 \,两个效果一样

2.使用 file.createNewFile() 方法才是创建文件的步骤,但是这里需要添加异常的判断,此处用的是try-catch

3.由于我的笔记本只有C盘,创建文件由于权限导致失败,这里,我在C盘里面创建一个IO文件夹,增加了一层目录,解决了问题

三.File的常用方法

import java.io.File;

public class FileMethod {
    public static void main(String[] args) {
        //演示文件的常用方法

        //创建文件
        File file = new File("c:/IO\newFile1.txt");

        //调用相应的方法:
        System.out.println("文件的名字是:"+file.getName());
        System.out.println("文件的绝对路径是:"+file.getAbsolutePath());
        System.out.println("文件的父级目录是:"+file.getParent());
        System.out.println("文件的大小(字节)是:"+file.length());
        System.out.println("文件是否存在:"+file.exists());
        System.out.println("是不是一个文件:"+file.isFile());
        System.out.println("是不是一个目录:"+file.isDirectory());

    }
}

这里文件的大小采用 Utf-8 的编码,中文占三个字符,英文占一个字符。

四.文件删除

这里既可以删除文件,也可以删除目录。

代码:

public void m(){
        File file = new File("c:\IO/io1");

        //使用boolean delete()方法进行删除
        //首先判断是否找到
        if(file.exists()){
            //判断是否删除成功
            if(file.delete()){
                System.out.println("成功删除");
            }
            else{
                System.out.println("删除失败");
            }
        }
        else{
            System.out.println("没找到该文件");
        }
    }

注意:如果目录里面有文件,则删除失败
五.创建目录

public void m1(){
        File file = new File("c:/IOstream/io1");
        if (file.exists()){
            System.out.println("该文件已经存在");
        }
        else{
            if(file.mkdirs()){
                System.out.println("创建成功");
            }
            else{
                System.out.println("创建失败");
            }
        }
    }

注意:这里要使用mkdirs()方法创建多级目录,mkdir()只能创建一级目录

六.FileInputStream

这里演示将文本文件中的内容显示到屏幕上

使用read()方法

import org.junit.Test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;


//演示字节输入流
public class FileInputStream_ {

    public static void main(String[] args) {
        //创建一个txt文件,读取txt文件中的内容并且输出到控制台上
        File file = new File("c:/io/file.txt");
        //创建FileInputStream对象时会报异常,需要处理
        int read = 0;
        FileInputStream fileInputStream = null;
        try {
            fileInputStream = new FileInputStream(file);
            //从该输入流读取一个字节的数据,如果没有输入可用,则方法会阻止,如果返回-1,表示读取完毕
            while((read=fileInputStream.read())!=-1){
                //需要将int类型的read转换为char
                System.out.print((char)read);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            //这里需要关闭流,否则将会资源浪费
            try {
                fileInputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

使用read(Byte[] byte)方法

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

public class demo {
    public static void main(String[] args) {
        File file = new File("c:/io/file.txt");
        FileInputStream fileInputStream = null;
        byte[] bytes = new byte[8];
        int readLen = 0;
        try {
            fileInputStream = new FileInputStream(file);
            while((readLen = fileInputStream.read(bytes))!=-1){

                System.out.print(new String(bytes,0,readLen));
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        finally {
            try {
                fileInputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

注意事项:

1.创建 FileInputStream对象时需要以 File对象为参数

2.为了避免资源的浪费,需要在finally中将资源释放,所以需要将 FileInputStream对象定义在try外面,设置为空

3.在创建FileInputStream对象和使用read()方法时都会抛出异常,这里就选取共同的父类异常IOException

4.最后使用close()方法也会抛出异常

5.int read()方法从输入流读取一个字符并返回该字符,输出时需要强转为char类型;int read(Byte[] byte),是一次性读取byte.length个字符并将这些字符的ASCII码保存到数组byte中,返回读取字符的个数(可能不够byte.length个字符),这里需要记录一个当前读取字符的个数,再通过String的构造器输出;上述两方法如果读到文件末尾,返回-1

七.FileOutputStream

代码:

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

public class FileOutputStream_ {
    public static void main(String[] args) {
        //在写文件的时候,如果文件不存在,会自动创建文件
        File file = new File("src/write.txt");
        FileOutputStream fileOutputStream = null;

        try {
            //以这种方式创建是覆盖
            //fileOutputStream = new FileOutputStream(file);
            //以这种方式创建是追加到文件末尾
            fileOutputStream = new FileOutputStream(file,true);

            //写入一个字节 使用void write(int b)
            fileOutputStream.write('a');//这里会发生转换


            //写入字符串 使用void write(byte[] b)
            String str = "hello";
            fileOutputStream.write(str.getBytes());//调用字符串的方法getBytes()将字符串转换为byte[]数组


            //写入字符串 使用void write(byte[] b ,int off , int len)
            fileOutputStream.write(str.getBytes(),2,3);

            fileOutputStream.write('n');

        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                fileOutputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

注意:

1.以这种方式创建对象是覆盖上次写的文件
fileOutputStream = new FileOutputStream(file);
以这种方式创建对象是追加到文件末尾
fileOutputStream = new FileOutputStream(file,true);

2.在写文件的时候,如果文件不存在,会自动创建

3.注意上述的三种写方法,注意在字符串的写方法时,需要调用str.getBytes()方法将字符串转换为byte数组

八.文件拷贝

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


public class FileCopy {
    public static void main(String[] args) {
        String filePath1 = "c:/io/copy.jpg";
        String filePath2 = "c:/io/copy1.jpg";
        FileOutputStream fileOutputStream = null;
        FileInputStream fileInputStream = null;
        try {
            fileOutputStream = new FileOutputStream(filePath2);
            fileInputStream = new FileInputStream(filePath1);
            byte[] buf = new byte[1024];
            int readLen = 0;
            while ((readLen=fileInputStream.read(buf))!=-1) {
                fileOutputStream.write(buf,0,readLen);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                fileInputStream.close();
                fileOutputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

注意:
这里演示的是图片的拷贝,由于图片太大了,所以采取byte[] 数组的读方法;在写入新文件的时候,需要记录当前读取的字符个数,然后用write(byte[] b , int off ,int len)方法写入,因为读取的字符大小不一定等于b.length

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/682549.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号