一、File的使用
①、new File(String fileName);的意义
②、获取当前文件夹下的所有文件
③、获取当前文件夹时候过滤掉不许要的文件夹
④、创建File文件,了解mkDir()和mkDirs()的区别
⑤、各种获取File路径的方法,和不同之处
二、I/O
①、几个重要的流
ByteArrayInputStream 、ByteArrayOutputStream、DataInputStream、DataOutputStrean、BufferedInputStream
②、stream转换成writter流(字节流转换成字符流)
③、RandomAccessFile的使用
④、PrintWrite
回答:
一、newFile()的作用
获取这个File文件的句柄,①、文件可以指Directory(文件夹,目录)也可以是File(文件,具体文件)
②、当文件不存在的时候,也是会获得文件的句柄(不过该句柄没任何作用而已),并且不会创建该文件。
二、获取当前文件夹的所有文件
调用file.listFiles()方法,返回File[]数组,如果想转成List就添加上Arrays.asList();转型
三、读取时候添加文件过滤器(FileNameFilter)
/** * 原理:通过调用file的listFile()获取file文件夹下的文本 * listFile(FileNameFilter filter) * FileNameFilter代表文件名过滤器,这是一个接口,需要自己创建。(策略模式) * 之后listFile()会重复调用accept()方法 */ public class Main { public static void main(String[]args){ //获取文件的句柄 File file = new File("D://VS"); //返回的是数组 File[] files = file.listFiles(new FileFilter(".*")); //通过Arrays转化成为Collection,当然这是只读的List List<File> lists = Arrays.asList(files); for(File myFile:lists){ System.out.println(myFile.getName()); } } } class FileFilter implements FilenameFilter{ private Pattern pattern; //正则表达式,添加过滤条件 public FileFilter(String reg){ pattern = Pattern.compile(reg); } @Override public boolean accept(File dir, String name) { // TODO Auto-generated method stub //判断是否符合过滤条件 return pattern.matcher(name).matches(); } }
四、创建File文件
//获取句柄 File file = new File("test"); //如果该文件不存在实体的时候,创建该文件 if (!file.exists()){ file.mkDir();//创建该文件或文件夹 }
1、File类的createNewFile根据抽象路径创建一个新的空文件,当抽象路径制定的文件存在时,创建失败
2、File类的mkdir方法根据抽象路径创建目录
3、File类的mkdirs方法根据抽象路径创建目录,包括创建必需但不存在的父目录
4、File类的createTempFile方法创建临时文件,可以制定临时文件的文件名前缀、后缀及文件所在的目录,如果不指定目录,则存放在系统的临时文件夹下。
5、除mkdirs方法外,以上方法在创建文件和目录时,必须保证目标文件不存在,而且父目录存在,否则会创建失败
五、获取File文件的路径
http://www.cnblogs.com/xulianbo/archive/2011/08/26/2154027.html
getPath()返回的是File构造方法里的路径,不做任何处理
getAbsolutePath()返回的是 user.dir+getPath(),也就是执行路径(默认保存的路径:比如说在C;//中)加上File构造方法中的路径
getCanonicalPath()返回的是将符号完全解析的路径,也就是全路径
所以:推荐使用getCanonicalPath()
六、重要的IO流
ByteArrayInputStream: 从byte[] bytes中读取 bytes文件中的字节。
例:
byte [] bytes = new byte[1024]; String str = "hello world"; bytes = str.getBytes(); //创建byte流输出 ByteArrayInputStream bais = new ByteArrayInputStream(bytes); int b = -1; while((b = bais.read()) != -1){ System.out.print(b + " "); } System.out.println(""); //for循环输出 for(int i=0; i<bytes.length; ++i){ System.out.print(bytes[i]+" "); }
使用ByteArrayInputStream的优点:可以套接其他流的装饰类
ByteArrayOutputStream:将文件以字节的方式写入内存的缓冲区。 然后再将byte提取出来。
例:
public class Main { public static void main(String[] args) { // TODO Auto-generated method stub File file = new File("test"); try { FileInputStream fis = new FileInputStream(file); ByteArrayOutputStream baos = new ByteArrayOutputStream(); int b = 0; while((b = fis.read()) != -1){ baos.write(b); } byte [] bytes = new byte[1024]; bytes = baos.toByteArray(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
DataInputStream: 从文件中读取基础类型。 我们一般都是从流中读取字节然后在转化成String类型,DataInputStream可以直接读取字节并转化成int 、char等基础类型。(感觉要与DataOutputStream配套使用才有效果) 提供 readInt()、readUTF8()等方法
DataOutputStream:将基础类型输出到文件中。提供writeInt()、writeUTF8()等方法。
例:
public class Main { public static void main(String[] args) { // TODO Auto-generated method stub //创建文件 File file = new File("D://asd.txt"); if (!file.exists()){ try { file.createNewFile(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } FileOutputStream fos = null; //将数据输出到文件中 try { //获取文件流 fos = new FileOutputStream(file); DataOutputStream dos = new DataOutputStream(fos); dos.writeInt(5); dos.writeUTF("你好"); dos.writeBoolean(true); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally{ try { fos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //从文件中获取数据 try { FileInputStream fis = new FileInputStream(file); DataInputStream dis = new DataInputStream(fis); StringBuilder stringBuilder = new StringBuilder(); //读取的顺序要按照放入的顺序来。 stringBuilder.append(dis.readInt() +" "); stringBuilder.append(dis.readUTF()+ " "); stringBuilder.append(dis.readBoolean()+ " "); System.out.println(stringBuilder.toString()); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
BufferedInputSream: 在内部设定一个缓冲流,现将数据写入缓冲流再读取,这样就不需要反复写入,提交程序运行效率。
RandomAccessFile:能够自定义锚点,从文件中的某个位置开始写入(比如说,从文件的最后开始写入)。支持读写。支持写入或者读取基引用类型。
PrintWriter:格式化写入文件。可以防止乱码