Printsream 对象并没有抛出 ioexception Q29 那个语句可以建立文件 file.txt 的字节输入流 Inputsream in=new InputStream(“file.txt”); Inputsream in=new FileReader(“file.txt“) FileInputSream in=new FileOutputStream(“file.txt”) FileInputStream in=new FileInputstream(“file.txt”) Inputsream 类的常用方法 Public abstract int read()throws IOException :从当前输入流中读取数据的下一个字节 Public int read(byte b[])throws IOEception:将当前输入流中 b.length 字节的数据督导一个 字节数组中 Public int read(byte b[],int off,int len)throws IOEception :将输入流中的 len 字节数据读入一 字节数组中,这个方法将保持阻塞知道有输入数据可用。 Skip(long n)从当前输入中跳过并丢弃 n 字节数据,返回实际跳过的字节数 Close()关闭当前输入流,并释放与它相关的任一系统资源。 Mark(int realimit):在该输入流中标记当前位置。 Reset()将该输入流重新定位到上一次调用 mark 方法是标记的位置 Marksupported:测试该输入流是否支持 mark 和 reset 方法 Outputsream Writer(int b)将指定字节写入当前输入流。 Writer(byte b [],int off,int len)将指定字节数组中从 off 开始的 len 字节写到当前输入流 Flush 刷新当前输入流,将任意缓冲输入的字节输入到此流中 Close 关闭当前的输入流,且释放与它相关的任一系统资源 A Q30 哪个是正确的文件操作 当前文件系统中已经存在了文件 file.txt,该文件包含有 ascll 文本,代码片段如下: Try{ File f =new File(“file.txt”); outputSream out=new FileOutputstream(f,true) }catch(IOEception){ } } 结果是什么 A 代码不能编译 B 代码可以编译运行,对该文件不会有改变 C 代码可以编译并运行,并将该文件的长度设置为 0 D 抛出异常,因为该文件没有关闭 E 代码可以编译运行,并从文件系统中删除该文件 1. file 类 File 类的实例表示主机文件系统中的文件。一个文件能通过一个路径指定,此路径名可以是 一条绝对路径,也可以是一条线对与当前工作目录的相对路径。 File(File,String)创建一个 File 实例,表示指定路径指定名称文件 File(String):创建一个 File 实例,表示路径名是指定参数的文件 File(String,String):创建一个 File 实例,它的路径名是指定的路径名后跟分隔符字符和 那么参数 File 类常用方法如下所述 1、构造函数 [java] view plain copy 1. public class FileDemo { 2. 3. 4. 5. 6. 7. 8. 符 9. 10. 11. 12. } } File f4 =new File(f3,"3.txt"); System.out.println(f1);//c:\zuidaima\1.txt public static void main(String[] args){ //构造函数 File(String pathname) File f1 =new File("c:\\zuidaima\\1.txt"); //File(String parent,String child) File f2 =new File("c:\\zuidaima","2.txt"); //File(File parent,String child) File f3 =new File("c:"+File.separator+"abc");//separator 跨平台分隔 2、创建方法 1.boolean createNewFile() 不存在返回 true 存在返回 false 2.boolean mkdir() 创建目录 3.boolean mkdirs() 创建多级目录 3、删除方法 1.boolean delete() 2.boolean deleteOnExit() 文件使用完成后删除 [java] view plain copy 1. import java.io.File; 2. import java.io.IOException; 3. public class FileDemo2 { 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. } } } public static void main(String[] args){ File f =new File("d:\\zuidaima\\1.txt"); try { System.out.println(f.createNewFile());//当文件存在时返回 false System.out.println(f.delete());//当文件不存在时返回 false } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); 4、判断方法 1.boolean canExecute()判断文件是否可执行 2.boolean canRead()判断文件是否可读 3.boolean canWrite() 判断文件是否可写 4.boolean exists() 判断文件是否存在 5.boolean isDirectory() 6.boolean isFile() 7.boolean isHidden() 8.boolean isAbsolute()判断是否是绝对路径 文件不存在也能判断 5、获取方法 1.String getName() 2.String getPath() 3.String getAbsolutePath() 4.String getParent()//如果没有父目录返回 null 5.long lastModified()//获取最后一次修改的时间 6.long length() 7.boolean renameTo(File f) 8.File[] liseRoots()//获取机器盘符 9.String[] list() 10.String[] list(FilenameFilter filter) 6、列出磁盘下的文件和文件夹 [java] view plain copy 1. public class FileDemo3 { 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. } } } } } public static void main(String[] args){ File[] files =File.listRoots(); for(File file:files){ System.out.println(file); if(file.length()>0){ String[] filenames =file.list(); for(String filename:filenames){ System.out.println(filename); 7、文件过滤 [java] view plain copy 1. import java.io.File; 2. import java.io.FilenameFilter; 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. } } } } } }); for(String filename:filenames){ System.out.println(filename); } public class FileDemo4 { public static void main(String[] args){ File[] files =File.listRoots(); for(File file:files){ System.out.println(file); if(file.length()>0){ String[] filenames =file.list(new FilenameFilter(){ //file 过滤目录 name 文件名 public boolean accept(File file,String filename){ return filename.endsWith(".mp3"); 8、File[] listFiles() File[] listFiles(FilenameFilter filter) 9、利用递归列出全部文件 [java] view plain copy 1. public class FileDemo5 { 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. } } else System.out.println(file); } public static void showDir(File dir){ System.out.println(dir); File[] files =dir.listFiles(); for(File file:files){ if(file.isDirectory()) showDir(file); public static void main(String[] args){ File f =new File("e:\\zuidaima"); showDir(f); 10、移动文件 找出 d 盘下所有的 .java 文件,拷贝至 c:\jad 目录下,并将所有文件的类型由.java 修改 为.jad 。 [java] view plain copy 1. public class Test5 { 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. } public static void moveFile(File dir){ File[] files=dir.listFiles(); for(File file:files){ if(file.isDirectory()) moveFile(file); else{ if(file.getName().endsWith(".java")) file.renameTo(new File("c:\\jad\\"+ public static void main(String[] args){ File f1 = new File("d:\\"); moveFile(f1); 14. d")); 15. 16. 17. 18. } } } file.getName().substring(0,file.getName().lastIndexOf('.'))+".ja } FileoutputStream 论是二进制数据还是字符数据 (文本数据) 都可以用文件输出流 java.io.FileOutputStream 以 字节流的方式保存到所指定文件。 不过, 如果写字符数据, FileWriter 更方便一些。 FileWriter 除了提供了文件写入功能之外,还内置了字符编码功能。(关于 FileWriter 的使用,请参 考本站相关文章) java.io.FileOutputStream 类继承和重写了抽象类 java.io.OutputStream。他们两个都是从最早 的 JDK, JDK1.0 就已经存在的类。 [父类 OutputStream] 抽象类 OutputStream 是所有字节输出流的基类,它共定义了一个构造方法和五个方法。构 造方法什么也没做。在五个方法中,有, ? 三个 Write 方法: public abstract void write(int b) throws IOException 向输出流里写入一个值为 b 的字节。需要注意的是,实际写入的是 int 类型 b 的低 8 位, 其余的 24 位被忽略。 如果有错误,则抛出 IOException。调用这个方法时,需要捕获和处理 IOException。这个 方法是 OutputStream 类的唯一的抽象方法,需要具体类必须实现。一般的例程为参看下面 示例程序。 public void write(byte[] b) throws IOException 向输入流里写入一个字节数组 b。效果和 write(b, 0, b.length) 相同。调用这个方法时,需要 捕获和处理 IOException。 OutputStream 和 FileOutputStream 的实现都是调用了下面的方法。 public void write(byte[] b, int off, int len) throws IOException 把位置为 off、长度为 len 的字节数组 b 中的数据写入到输出流中。OutputStream 的实现是 反复调用 write(int b), 子类应该提供更有效率的实现。如果 b 是 null, 则抛出 NullPointerException 。如果 off 或者 len 小于 0,或者 off + len 大于数组 b 的长度, 则 抛出 IndexOutOfBoundsException 。 FileOutputStream 重写了这个方法。 下面用一段例程演示 void write(int b) 和 void write(byte[] b) 的使用: // TestFileOutputStream.java import java.io.*; public class TestFileOutputStream { public static void testWrite() { try{ FileOutputStream fo = new FileOutputStream("MyOut.dat"); fo.write(0); fo.write(0x43); fo.write(0x44); //fo.flush(); // 如果 OutputStream 的实现使用了缓存,这个方法用于清空缓存里的数据, 并通知底层去进行实际的写操作 // FileOutputStream 没有使用缓存,因此这个方法调用与否在这个例子的运行结 果没有影响。 fo.close(); // 注意:如果用户忘记关闭打开的文件,系统可以通过 finalyze 方法在垃圾 回收的时候替用户关闭这个流。 // 虽然如此,用户应该显示的调用这个方法。 }catch(IOException e) { e.printStackTrace(); } } public static void testWriteBytes() { try{ // 构造一个要写的数据: byte[] data = "这个例子测试文件写".getBytes("GB2312"); FileOutputStream fo = new FileOutputStream("MyOut1.data"); fo.write(data); //fo.flush(); //如果 OutputStream 的实现使用了缓存, 这个方法用于清空缓存里的数据, 并通知底层去进行实际的写操作 // FileOutputStream 没有使用缓存,因此这个方法调用与否在这个例子的运行 结果没有影响。 fo.close(); }catch(Exception e) { e.printStackTrace(); } } public static void main(String[]args) { testWrite(); testWriteBytes(); } } ? 其余两个方法 public void flush() throws IOException 如果 OutputStream 的实现使用了缓存,这个方法用于清空缓存里的数据,并通知底层去进 行实际的写操作。需要注意的是,这个缓存特指 Java 层的缓存。这个方法对底层(如操作 系统)的缓存不起作用。