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 class JavaUseTest { 11 12 public static void main(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.txt 29 File(String filename);//filename文件名字;会被认为在当前应用程序在同一目录;hello.txt:C:\Users\Nirobert Einteson\eclipse-workspace\HelloWorld\hello.txt 30 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 public 48 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,.java 58 public File[] listFiles();//以File对象的形式返回目录下的所有文件 59 public File[] listFiles(FilenameFilter object);//以 File对象的形式 返回返回目录下指定的类型的文件 如:.txt,.java 60 61 FilenameFilter是一个接口;有方法accept(File dir,String name);需要实现接口 62 public boolean accept(File dir,String name); 63 64 65 66 67 文件字节流: 68 读写文件的子类:FileInputStream 和FileOutputStream 69 若只是简单的读写文件,那么就可以使用FileInputStream 和FileOutputStream 70 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)字节值,到达末尾 返回-1 81 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(new FilenameFilter(){ 124 //重写 接口的 方法,这里属于是匿名接口的实现 125 @Override 126 public boolean 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=new FileOutputStream(file3); 151 //变成字节数组,在 文件输出流中 ,写入到文件里面 152 byte byteFile[]="this is a byte stream".getBytes(); 153 fileOutputStream3.write(byteFile); 154 155 FileOutputStream fileOutputStream4=new FileOutputStream(file4); 156 fileOutputStream4.write(byteFile); 157 158 //从文件字节 的输入流 中读数据--->read()方法 159 FileInputStream fileInputStream=new FileInputStream(file); 160 161 byte byteReadData[]=new byte[8];//初始化4个字节数组 162 int data; 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 }
原文:https://www.cnblogs.com/NirobertEinteson/p/12019898.html