欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java文件输入输出(IO流)操作方法

程序员文章站 2022-03-13 17:08:59
...

Java文件输入输出(IO流)操作方法

先说说我自己的看法吧:

字节流是负责文件数据传输的

字符流则是用于文字传输
(这里有个大坑,字符流的readLine()不会接收回车和换行,并且没收到回车和换行符号时,该方法处于阻塞状态,有兴趣了解可以点这个链接readLine方法产生阻塞的坑)

以下是我根据网上和自己了解写的一些文件编辑的方法

字节流写入(第一个参数是文件路径,第二个是要写入的数据):

	public static void outputStream(String filePath, String data) {
       	File file = new File(filePath);
        FileOutputStream fos = null;
        if (!file.exists()) {
            try {
                file.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        //如果文件不存在则创建
        try {
            fos = new FileOutputStream(file, true);
            //false是格式化后打开,true是非格式化打开
            fos.write(data.getBytes());
            //fos.write('\n');加上这个可以每输入完一段数据就用回车键分隔开来
            fos.flush();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }
                

字节流读取(参数是文件路径):

    public static void inputStream(String filePath) {
        File file = new File(filePath);
        InputStream fis = null;
        if (!file.exists()) {
            try {
                file.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        //如果文件不存在则创建
        try {
            fis = new FileInputStream(file);
            int len = 0;
            byte[] bytes = new byte[1024];
            while ((len = fis.read(bytes)) != -1) {
                //这里bytes是得到的数据,每次得到len个字节
                //可将下面的打印语句替换成你想要对数据执行的操作
                System.out.print(new String(bytes, 0, len));
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fis != null) {
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

字符流写入(第一个参数是文件路径,第二个是要写入的数据):

public static void bufferedWriter(String filePath, String data) {
    File file = new File(filePath);
    FileWriter fw = null;
    BufferedWriter bw = null;
    if (!file.exists()) {
        try {
            file.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    try {
        //false是格式化后打开,true是非格式化打开
        fw = new FileWriter(file, true);
        bw = new BufferedWriter(fw);
        bw.write(data);
        bw.flush();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (fw != null) {
            try {
                fw.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        if (bw != null) {
            try {
                bw.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

字符流读取(注意:readLine()方法遇到’\n’和’\t’会认为是读取了一行,所以无法读取回车’\n’、换行’\n’):

public static void bufferedReader(String filePath) {
        File file = new File(filePath);
        FileInputStream fis = null;
        InputStreamReader isr = null;
        BufferedReader br = null;
        if (!file.exists()) {
            try {
                file.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        String tempString = null;
        try {
            fis = new FileInputStream(file);
            //utf-8是编码模式
            isr = new InputStreamReader(fis, "utf-8");
            br = new BufferedReader(isr);
            // 一次读入一行,直到读入null为文件结束
            while ((tempString = br.readLine()) != null) {
            
            //这里你可以通过tempString来循环获得一行数据
                System.out.print(tempString);
            
            }
            br.close();
        } catch (IOException e) {
            e.printStackTrace();

        } finally {
            if (fis != null) {
                try {
                    fis.close();
                } catch (IOException e1) {
                }
            }
            if (isr != null) {
                try {
                    isr.close();
                } catch (IOException e1) {
                }
            }
            if (br != null) {
                try {
                    br.close();
                } catch (IOException e1) {
                }
            }
        }
    }

文件复制(第一个参数是旧文件的路径,第二个是新文件的路径,如果路径没有文件则自动创建):

public static void copyFile(String oldFilePath,String newFilePath) {
        File newfile = new File(newFilePath);
        File oldfile = new File(oldFilePath);
        if (!newfile.exists()) {
            try {
                newfile.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        if (!oldfile.exists()) {
            try {
                oldfile.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        InputStream inputStream = null;
        OutputStream outputStream = null;
        try {
            inputStream = new FileInputStream(oldfile);
            outputStream = new FileOutputStream(newfile);
            byte[] bytes = new byte[1024];
            int len = 0;
            while ((len=inputStream.read(bytes)) != -1) {
                outputStream.write(bytes,0,len);
                outputStream.flush();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if(inputStream!=null){
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(outputStream!=null){
                try {
                    outputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

替换文件中数据

这位老哥写很非常好(无法替换回车’\n’和换行’\t’)

Java 实现替换文件的指定内容

其实还有socket连接来传输数据,不过我懒得写了=.=