File与IO

Posted 猪八戒1.0

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了File与IO相关的知识,希望对你有一定的参考价值。

一.File类添加方法 

        1.创建文件和文件夹

        2.创建多级文件

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

public class FileDemo1 
    public static void main(String[] args) 
        File file1=new File("D:\\\\x9504.txt");
        try 
            //如果文件不存在会自动创建
            boolean flag1=file1.createNewFile();
            //创建一个新的普通文件
            System.out.println(flag1?"创建成功":"创建失败");

            //创建一个文件夹
            File file2 = new File("D:\\\\x9504_java");
            boolean flag2=file2.mkdir();
            System.out.println(flag2?"文件夹创建成功":"文件夹创建失败");

            //创建多级文件
            File file3 = new File("D:\\\\x9504_web\\\\html\\\\tag");
            boolean flag3=file3.mkdirs();
            System.out.println(flag3?"文件夹创建成功":"文件夹创建失败");

         catch (IOException e) 
            e.printStackTrace();
        
    

二.删除文件

import java.io.File;

public class FileDemo2 
    public static void main(String[] args) 
        File file1=new File("D:\\\\x9504.txt");
        boolean flag1=file1.delete();
        System.out.println(flag1?"删除成功":"删除失败");
    

三.查询文件

判断指定路径名的文件是否存在

获取文件的大小

获取文件名

获取文件路径

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

public class FileDemo3 
    public static void main(String[] args) 
        File file1=new File("D:\\\\x9504");
        //1.判断某个路径文件是否存在
        boolean flag1=file1.exists();
        if(flag1)
            System.out.println("你的文件已经存在,不需要创建");
        else 
            file1.mkdir();
        
        //2.获取文件大小
        File file2=new File("D:\\\\202010137225.txt");
        try 
            file2.createNewFile();
             Long size=file2.length();
            System.out.println("size="+size);
         catch (IOException e) 
            e.printStackTrace();
        
        //3.获取文件名
        String fileName=file2.getName();
        System.out.println("fileName="+fileName);
        //4.获取文件的路径
        //绝对路径
        String path1=file2.getAbsolutePath();
        System.out.println("path1="+path1);
        String path2=file2.getPath();
        System.out.println("path2="+path2);
    

四.递归(也是一道面试题)

        isDirectory():判断文件是否是文件夹

        listFiles():查询某一个文件夹下的所有文件

import java.io.File;

public class FileDemo4 
    public static void showFile(String pathname) 
        //找出某个文件夹下所有的文件
        File file1 = new File(pathname);
        //1.判断文件是否是文件夹
        boolean flag1=file1.isDirectory();
        if(flag1)
            File[] files = file1.listFiles();
            //增强for循环 for(数据类型 变量名:数组/集合)
            for(File tempFile:files)
                boolean flag2 = tempFile.isDirectory();
                if(flag2)//是文件夹
                    showFile(tempFile.getPath());
                else 
                    //获取此文件的路径
                    String filePath=file1.getPath();
                    System.out.println("普通文件------------"+filePath);
                
            
        else//不是文件夹
            //获取此文件的路径
            String filePath=file1.getPath();
            System.out.println("普通文件------------"+filePath);
        
    

    public static void main(String[] args) 
        FileDemo4.showFile("D:\\\\");
    

解决bug 空指针(也就是说files 出现了空,可以不采用增强for循环,加上不等于空)

import java.io.File;

public class FileDemo4 
    public static void showFile(String pathname) 
        //找出某个文件夹下所有的文件
        File file1 = new File(pathname);
        //1.判断文件是否是文件夹
        boolean flag1=file1.isDirectory();
        if(flag1)
            File[] files = file1.listFiles();
            //增强for循环 for(数据类型 变量名:数组/集合)
            //for(File tempFile:files)
            //boolean flag2 = tempFile.isDirectory();
            for(int i=0;files!=null&&i<files.length;i++)
                boolean flag2 = files[i].isDirectory();
                if(flag2)//是文件夹
                    //showFile(tempFile.getPath());
                    showFile(files[i].getPath());
                else 
                    //获取此文件的路径
                    String filePath=file1.getPath();
                    System.out.println("普通文件------------"+filePath);
                
            
        else//不是文件夹
            //获取此文件的路径
            String filePath=file1.getPath();
            System.out.println("普通文件------------"+filePath);
        
    

    public static void main(String[] args) 
        FileDemo4.showFile("D:\\\\");
    

五.字节输入流 FileInputStream

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

public class IODemo1 
    public static void main(String[] args) 

        try 
            //1.在文件和程序之间铺设管道

            /*参数  File
            File f1 = new File("D:\\\\1.txt");
            if (f1.exists()&&f1.length()>0)
                FileInputStream fis = new FileInputStream(f1) ;
            */

            //参数 String
            FileInputStream fis = new FileInputStream("D:\\\\1.txt") ;
            //2.开水龙头 read函数返回值类型是int
            int ch=0;
            while((ch=fis.read())!=-1)
                System.out.print((char)ch);
            

            //3.关水龙头
            fis.close();

         catch (Exception e) 
            System.out.println("?????");
        
    

六.字节输出流 FileOutputStream

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

public class IODemo2 
    public static void main(String[] args) 

        try 
            //1.创建水厂
            String data="hello io,hello java ";
            //2.铺设程序通往盘符的管道 如果文件不存在会自动创建文件
            //第二个参数为true时表追加,false表不追加即覆盖
            FileOutputStream fos = new FileOutputStream("D:\\\\2.txt",true);
            //3.开水龙头,放水
            byte[] tempByte=data.getBytes();
            fos.write(tempByte);
            //关水龙头
            fos.close();

         catch (Exception e) 
            throw new RuntimeException(e);
        
    


七.实现复制

import java.io.FileInputStream;
import java.io.FileOutputStream;

public class IODemo3 
    public static void main(String[] args) 
        try 
            long startTime=System.currentTimeMillis();

            //1.在文件和程序之间铺设管道
            FileInputStream fis = new FileInputStream("D:\\\\1.txt");
            //2.铺设程序通往盘符的管道 如果文件不存在会自动创建文件
            FileOutputStream fos = new FileOutputStream("D:\\\\2.txt");

            //3.开水龙头
            int ch = 0;
            while ((ch = fis.read()) != -1) 
                fos.write(ch);
            
            long endTime=System.currentTimeMillis();
            System.out.println("复制花"+(endTime-startTime)+"毫秒");
            //3.关水龙头
            fis.close();
            fos.close();
         catch (Exception e) 
            System.out.println("文件找不到");
        
    


八.BufferedInputStream字节缓冲输入流 读

由于BufferedInputStream的参数必须为InputStream

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;

public class IODemo4 
    public static void main(String[] args) 

        try 
            long startTime=System.currentTimeMillis();
            //1.水厂(D:\\1.txt)
            //2.铺设管道
            FileInputStream fis = new FileInputStream("D:\\\\1.txt");
            BufferedInputStream bis=new BufferedInputStream(fis);
            //开水龙头
            //创建一辆车 这辆车一次能搬1024字节大小的砖
            byte[] car = new byte[1024];
            int len=0;
            //搬一次输出一次 如果超过1024字节 则每次输出1024 最后输出剩余砖数
            while ((len=bis.read(car))!=-1)
                System.out.print(len);
            
            //关水龙头
            bis.close();

            long endTime=System.currentTimeMillis();
            System.out.println("共花"+(endTime-startTime)+"ms");
         catch (Exception e) 
            throw new RuntimeException(e);
        
    

九.BufferedOutputStream 字节缓存输出流 写

import java.io.*;

public class IODemo4 
    public static void main(String[] args) 

        try 
            long startTime=System.currentTimeMillis();
            //1.水厂(D:\\1.txt)
            //2.铺设管道
            FileInputStream fis = new FileInputStream("D:\\\\1.txt");
            BufferedInputStream bis=new BufferedInputStream(fis);

            FileOutputStream fos = new FileOutputStream("E:\\\\2.txt");
            BufferedOutputStream bos=new BufferedOutputStream(fos);
            //开水龙头
            //创建一辆车 这辆车一次能搬1024字节大小的砖
            byte[] car = new byte[1024];
            int len=0;
            //搬一次输出一次 如果超过1024字节 则每次输出1024 最后输出剩余砖数
            while ((len=bis.read(car))!=-1)
                //由于不是每一车都会装满
                bos.write(car,0,len);
            
            //关水龙头
            bis.close();
            bos.close();
            long endTime=System.currentTimeMillis();
            System.out.println("共花"+(endTime-startTime)+"ms");
         catch (Exception e) 
            throw new RuntimeException(e);
        
    

十.总结

1.字节流:可以读取一切文件,缺点是由于是一个一个的读,可能出现乱码

2.字符流:读取文本文件比较方便,都做字符与字节无关,帮我们处理了乱码问题。 局限性是不能读取片,视频,音频的

十一.FileReader()

 由于.read(),若一次读一车,由于内部填的是字节,而汉字多字节,容易出现乱码

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class ReaderDemo1 
    public static void main(String[] args) 
        FileReader fr= null;
        try 
            fr = new FileReader("D:\\\\1.txt");
            char[] car=new char[1024];
            int len=0;
            while ((len= fr.read(car))!=-1) 
                String str=new String(car,0,len);
                System.out.println(str);
            
            fr.close();
         catch (IOException e) 
            throw new RuntimeException(e);
        
    


十二.文件快移

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>工具一</title>
</head>
<style type="text/css">
	.f
		width:1000px;
		margin:0px auto;
		font-size: 40px;
	
</style>

<body>
<%@ include file="top.jsp" %>
<div class="f">

<form action="tool_one_next.jsp" method="post">
    文件初始位置:<input type="text" name="startposition"> <br>
    文件传输位置:<input type="text" name="endposition"> <br>
    <input type="submit" value="确定">
</form>

</div>


</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@page import="java.util.*"%>
<%@page import="java.io.*"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>工具一传输</title>
</head>
<%@ include file="top.jsp" %>
<%
		String startposition = request.getParameter("startposition");//文本框
		String endposition = request.getParameter("endposition");//文本框
	
		long startTime = System.currentTimeMillis();
		
		//1.水厂
		//2.铺设管道
		FileInputStream fis = new FileInputStream(startposition);
		BufferedInputStream bis = new BufferedInputStream(fis);
	
		FileOutputStream fos = new FileOutputStream(endposition);
		BufferedOutputStream bos = new BufferedOutputStream(fos);
		//开水龙头
		//创建一辆车 这辆车一次能搬3G大小的砖
		byte[] car = new byte[1024*1024];
		int len = 0;
		//搬一次输出一次 如果超过1G 则每次输出1G 最后输出剩余砖数
		while ((len = bis.read(car)) != -1) 
			//由于不是每一车都会装满
			bos.write(car, 0, len);
		
		//关水龙头
		bis.close();
		bos.close();
		long endTime = System.currentTimeMillis();
		
		out.print("传输完毕,共用"+(endTime-startTime)+"毫秒");
	
%>
<body>

</body>
</html>

以上是关于File与IO的主要内容,如果未能解决你的问题,请参考以下文章

Rinkeby 水龙头不能与 Metamask 一起使用?

全球云计算龙头:微软和Azure的十年蜕变

物联网的龙头是哪个,,请说明理由!!

1326. 灌溉花园的最少水龙头数目

酿造水龙头是啥意思?

云计算龙头股-云计算概念股票有哪些企业