Java文件输入输出

  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 }

猜你喜欢

转载自www.cnblogs.com/NirobertEinteson/p/12019898.html