1 package org.java;2
3 import java.io.File;4 import java.io.FileInputStream;5 import java.io.FileOutputStream;6 import java.io.FilenameFilter;7 import java.io.IOException;8
9
10 public classJavaUseTest {11
12 public static voidmain(String[] args) {13 /*
14 Java文件输入输出15 从输入流中 读取数据16 在输出流中 写入数据17
18 Java.io包提供流类19 InputStream抽象类 的 子类 创建的 流对象 称为 字节输入流20 OutputStream抽象类 的 子类 创建的 流对象 称为 字节输出流21 Reader抽象类 的 子类 创建的 流对象 称为字符输入流22 Writer抽象类 的 子类 创建的 流对象 称为字符输出流23
24
25 File类:26 主要 获取一些文本信息:27 构造方法:28 File(URI uri);//传入文件的目录地址和名字 :file.txt:绝对路径是->C:\Users\Nirobert Einteson\Desktop\java\File\file.txt29 File(String filename);//filename文件名字;会被认为在当前应用程序在同一目录;hello.txt:C:\Users\Nirobert Einteson\eclipse-workspace\HelloWorld\hello.txt30 File(String directoryPath,String filename);//directoryPath文件路径31 File(File fileParentPath,String name);//在 file 的父路径 路径 下创建 新的 文件 filex.txt;32
33 文件的属性:34 public String getName();//获取文件的名字35 public boolean canRead();//判断文件是否是 可读的36 public boolean canWrite();//判断文件是否是 可被写入37 public boolean exists();//判断文件是否 存在38 public String getAbsolutePath();//获取文件的绝对路径39 public String getParent();//获取文件的父目录40 public boolean isFile();//判断文件是否是 一个普通的文件,而不是目录41 public boolean isDirectory();//判断文件是否是一个目录42 public boolean isHidden();//判断文件是否是 隐藏文件43 public long lastModified();//获取文件的 最后修改的时间(毫秒数)44 public long length();//获取文件的长度45 public boolean delete();//删除文件;file.delete();46 public boolean createNewFile();//如果目录中没有要创建的文件,那么会调用这个方法,创建这个文件47 public48
49
50 文件的创建51 File file=new File(filename);52 文件的删除53
54 目录:55 pubic boolean mkdir();//创建一个目录 创建成功返回true,否则返回false(文件已存在也是false);56 public String[] list();//以字符串形式目录下的所有文件57 public String[] list(FilenameFilter object);//以字符串形式 返回目录下指定的类型的文件 如:.txt,.java58 public File[] listFiles();//以File对象的形式返回目录下的所有文件59 public File[] listFiles(FilenameFilter object);//以 File对象的形式 返回返回目录下指定的类型的文件 如:.txt,.java60
61 FilenameFilter是一个接口;有方法accept(File dir,String name);需要实现接口62 public boolean accept(File dir,String name);63
64
65
66
67 文件字节流:68 读写文件的子类:FileInputStream 和FileOutputStream69 若只是简单的读写文件,那么就可以使用FileInputStream 和FileOutputStream70
71 文件字节输入流:72 关闭输入流 :fileInputStream.close();73 FileInputStream 是 InputStream 的子类:74 构造方法:75 FileInputStream(String name);76 FileInputStream(File file);77 参数name 和file 称为输入流的源,输入流通过调用read方法 读出 源 中的数据78
79 以字节为单位 读 文件80 //2^8 =256-> 返回(0,255)字节值,到达末尾 返回-181 int read();//输入流 调用read() 方法 顺序 地 从源 中读取 单个 字节数据 ;82 int read(byte b[]);//按照字节 顺序地 从文件中读取b.length个数据,然后放到 字节数组 b里面83 int read(byte b[],int off,int len);///按照字节 顺序地 从文件中 off开始 顺序地 读取len个字节 , 放到 字节数组 b里面84 read读取文件,只要不关闭流,那么每次调用read 方法 都会顺序地 读取剩余 的内容,直到读完流中的文件 或者文件关闭85
86 FileOutputStream类:87 关闭输出流: 关闭输入流 :fileOutputStream.close();88 构造方法:89 FileOutputStream(String name);90 FileOutputStream(File file);91 以name ,file 作为目的地 把数据在 输出流中 写入文件中92
93 以字节为单位 写入文件:94 //以字节为单位顺序写入 数据95 public void write(byte b[]);//把字节数组中 数据 全部写入到文件中96 public void write(byte b[],int off,int len);//把字节数组中 偏移量off开始 共len个字节 数据,写入到文件中97
98
99
100 可以加大 输入输出流的 强度101 将字节型 流 变成 字符型流102 变成103 */
104 String path="C:\\Users\\Nirobert Einteson\\Desktop\\java\\File\\";//文件的所在的目录
105
106 File file=new File(path+"file.txt");//在path路径下 创建file.txt文件
107 File file2=new File("file2.txt");//默认 和当前应用程序在同一目录;即:*.java 在同一目录下
108 File file3=new File(path,"file3.txt");//在path路径下,创建file3.txt文件
109 File file4=new File(file3.getParent(),"file4.txt");//在 file3的父路径 路径 下创建 新的 文件 file4.txt;
110
111 System.out.println(file.getName()+":绝对路径是->"+file.getAbsolutePath());112 System.out.println(file2.getName()+":绝对路径是->"+file2.getAbsolutePath());113 System.out.println(file3.getName()+":绝对路径是->"+file3.getAbsolutePath());114 System.out.println(file4.getName()+":绝对路径是->"+file4.getAbsolutePath());115
116 System.out.println("file文件是否可读"+file.canRead());117 System.out.println("file文件是否可写"+file.canWrite());118 System.out.println("file文件的长度"+file.length());119
120 //路径 path 下.的内容;//.代表 当前路径
121 File dir=new File(path+".");//C:\Users\Nirobert Einteson\Desktop\java\File\.122 //取出目录下的 所有.txt文件
123 String[] filenames=dir.list(newFilenameFilter(){124 //重写 接口的 方法,这里属于是匿名接口的实现
125 @Override126 publicboolean accept(File dir,String name) {127 return name.endsWith(".txt");//dir路径下;名字以.txt结尾的文件
128 }});129 //文件以字符串的形式 已经存到 filenames里面
130 System.out.println(path+"路径下以.txt结尾的文件有"+filenames.length+"个"+"\n"+"分别是:");131 for(String name1:filenames) {132 System.out.println(name1);133 }134
135 //直接获取文件夹里面的所有文件 存到字符串数组里面
136 File file5=new File(path+".");//C:\Users\Nirobert Einteson\Desktop\java\File\.
137 String names[]=file5.list();//获取这个路径下的所有文件
138 System.out.println(path+"路径下以.txt结尾的文件有"+names.length+"个"+"\n"+"分别是:");139 for(String name1:names) {140 System.out.println(name1);141 }142
143 //删除文件
144 file3.delete();145 System.out.println(file3.exists());146
147 try {//文件可能会抛出异常 ,所以需要在try-catch语句里面进行写148
149 //在输出流中 ,向文件写入数据--write();方法
150 FileOutputStream fileOutputStream3=newFileOutputStream(file3);151 //变成字节数组,在 文件输出流中 ,写入到文件里面
152 byte byteFile[]="this is a byte stream".getBytes();153 fileOutputStream3.write(byteFile);154
155 FileOutputStream fileOutputStream4=newFileOutputStream(file4);156 fileOutputStream4.write(byteFile);157
158 //从文件字节 的输入流 中读数据--->read()方法
159 FileInputStream fileInputStream=newFileInputStream(file);160
161 byte byteReadData[]=new byte[8];//初始化4个字节数组
162 intdata;163 while((data=fileInputStream.read(byteReadData,0,8))!=-1) {//每次都读取8个字节 放到 byteReadData字节数组里面164 //data位每次从输入流中 实际读取了多少个数据
165 String string=new String(byteReadData,0,data);//data是每次读取了多少个字节数,比如8,8,8,3最后一个到不了8个字节166 //String string2=new String(byteReadData,0,8);//每次都输出8个,可能不正确,比如只读出了3个却输出了8个
167 System.out.println(string);168 }169
170
171
172 }catch(IOException e) {173 System.out.println(e);174 }175
176 }177
178 }