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的主要内容,如果未能解决你的问题,请参考以下文章