输入输出流分字节流和字符流。字符流的读写通常以read和write结尾。
一、写入文件
1.FileWriter类:
FileWriter fw=new FileWriter("hello");//在workspace工作空间里创建文件,文件名为hello
FileWriter fw=new FileWriter("E:\hello");//在E盘创建文件,文件名为hello
FileWriter fw=new FileWriter("E:\hello.txt");//在E盘创建txt文件hello
如果在相同位置已经有同名文件会覆盖原来的文件,即一个新建的空文件。
如果路径不对则会抛出异常,例如:java.io.FileNotFoundException: Z:hello (系统找不到指定的路径。)
2.BufferedWriter类:
将文本写入字符输出流,缓冲字符,以提供单个字符,数组和字符串的高效写入。可以指定缓冲区大小,或者可以接受默认大小。 默认值足够大,可用于大多数用途。
1 import java.io.*; 2 3 public class MyTest9 { 4 public static void main(String []args) { 5 try{ 6 FileWriter fw=new FileWriter("E:\hello");//在workspace工作空间里创建文件 7 BufferedWriter bw=new BufferedWriter(fw);//创建bw对象专门为fw对象写入字符流,fw是某个文件引用(对象) 8 bw.write("Hello world! "); //为文件fw写入字符 9 bw.write(' ');//换行 10 bw.write(" ");//换行 11 bw.newLine();//换行,并非所有平台都使用换行符(' n')来终止行。 因此,调用此方法来终止每个输出行,因此优选直接写入换行符。 12 bw.write("Oh no! "); 13 String s="shoulinniao "; 14 bw.write(s); 15 bw.write(s,0,5); 16 bw.newLine(); 17 char[] s2=new char[10]; 18 for(int i=0;i<10;i++) 19 s2[i]=(char)(i+'0'); 20 bw.write(s2); 21 bw.newLine(); 22 bw.write(s2,0,8);//从0开始截取,截8个长度,即下标0-7 23 bw.newLine(); 24 int a=19; 25 bw.write(a);//数字读不进去,要转成字符 26 bw.newLine(); 27 bw.write(8); 28 bw.newLine(); 29 bw.write(s.valueOf(a));//转化为字符型 30 bw.close();//不关掉的话duqu.txt里没东西 31 }catch(Exception ex){ 32 ex.printStackTrace(); 33 } 34 } 35 }
二、读出文件
1.File类:
File(String path);//通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
String [] list();//返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录。
String getPath();
//将此抽象路径名转换为路径名字符串。
Boolean isAbsolute();//判断是否为绝对路径
Boolean isDirectory();//判断是否为目录
boolean mkdir();//创建由此抽象路径名命名的目录。
boolean mkdirs();//创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录。如果目录存在不会重建空目录
1 import java.io.File; 2 3 public class MyTest10{ 4 public static void main(String []args) { 5 try{ 6 File ffwq=new File("E:\");//创建代表路径的对象,并不是创建一个文件 7 8 File ff=new File("E:\new_directory3"); 9 ff.mkdirs(); //在路径ff下新建一个目录目录名new_directory 10 //打印出目录下的内容 11 if(ffwq.isDirectory()){ 12 String[] de=ffwq.list(); 13 for(int i=0;i<de.length;i++){ 14 System.out.println(de[i]); 15 } 16 System.out.println("---------------------------1"); 17 de=ff.list(); 18 for(int i=0;i<de.length;i++){ 19 System.out.println(de[i]); 20 } 21 } 22 System.out.println("---------------------------2"); 23 //取的文件的绝对路径 24 System.out.println(ff.getAbsolutePath()); 25 //删除对象代表的文件.如果目录下有文件也会返回false,删除不成功也会返回false。 26 boolean delet=ff.delete(); //目录下是空的才能删除,返回true,否则返回false 27 System.out.println(delet); 28 }catch(Exception ex){ 29 ex.printStackTrace(); 30 } 31 } 32 }
2.FileReader类:
FileReader(File file);//创建一个新的 FileReader ,给出 File读取。
FileReader(String fileName);//创建一个新的 FileReader ,给定要读取的文件的名称。
3. BufferedReader类:
从字符输入流读取文本,缓冲字符,以提供字符,数组和行的高效读取。可以指定缓冲区大小,或者可以使用默认大小。 默认值足够大,可用于大多数用途。
BufferedReader(Reader in);//创建使用默认大小的输入缓冲区的缓冲字符输入流。
BufferedReader(Reader in, int sz);//创建使用指定大小的输入缓冲区的缓冲字符输入流。
void close();//关闭流并释放与之相关联的任何系统资源。
String readLine();//读一行字符。
1 public class MyTest8 { 2 public static void main(String[] args) { 3 ArrayList<String> list = new ArrayList<String>(); 4 try{ 5 File f=new File("E:\hello");//创建文件对象f 6 FileReader fr=new FileReader(f); //fr对象 对应f的读出 7 BufferedReader br=new BufferedReader(fr);//br是 对应fr的 读出缓冲区 8 String shuchu=null; 9 int i=0; 10 while((shuchu=br.readLine())!=null){ 11 list.add(shuchu);//用一个数组全部存起来方便修改 12 System.out.println(shuchu); 13 } 14 for(int j=0;j<list.size();j++) 15 System.out.println(list.get(j)); 16 br.close(); 17 }catch(Exception ex){ 18 ex.printStackTrace(); 19 } 20 } 21 }