一.文件在程序中是以流的形式存在的
二.创建文件
代码:
import java.io.File; import java.io.IOException; /** * @author ZHR * @version 1.0 **/ 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; /** * @author ZHR * @version 1.0 **/ 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; /** * @author ZHR * @version 1.0 **/ //演示字节输入流 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)方法
/** * @author ZHR * @version 1.0 **/ 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