收藏 分享(赏)

Java输入输出流详细用法.docx

上传人:buyk185 文档编号:4295966 上传时间:2018-12-21 格式:DOCX 页数:9 大小:35.88KB
下载 相关 举报
Java输入输出流详细用法.docx_第1页
第1页 / 共9页
Java输入输出流详细用法.docx_第2页
第2页 / 共9页
Java输入输出流详细用法.docx_第3页
第3页 / 共9页
Java输入输出流详细用法.docx_第4页
第4页 / 共9页
Java输入输出流详细用法.docx_第5页
第5页 / 共9页
点击查看更多>>
资源描述

1、输入输出流一、 File 类1. File 对象的四种构造方法File(String filename);File(String directoryPath); File(String directoryPath,String filename);File(File f ,String filename);2. File 类的属性public String getName();public boolean canRead();public boolean canWrite();public boolean exits();public long length();public String g

2、etAbsolutePath();/获取文件的绝对路径public String getParent();/获取文件的父目录public boolean isFile();public boolean isDirectory();public boolean isHidden();public long lastModified();/获取文件最后修改的时间(时间是从 1970 年午夜至文件最后修改时刻的毫秒数)3. 创建目录(创建文件夹)public boolean mkdir();/创建成功返回 true,否则返回 false4. 列出目录中的文件如果 File 对象是一个目录,可以调用下

3、面方法列出该目录下的文件和子目录Public String list();Public File listFiles();5. 列出目录中特定类型的文件Public String list(FilenameFilter obj);Public File listFiles(FilenameFilter obj);FilenameFilter 是一个接口,该接口有一个方法:Public Boolean accept(File dir,String name); 例:File file=new File(“路径”);FilenameFilter filter=new FilenameFilter(

4、)Public Boolean accept(File dir,String name)Return name.endsWith(“.java”);File files=file.listFiles(filter);For(File f:files)System.out.println(f.getName();6. 文件的创建与删除Public Boolean createNewFile();File.delete();7. 运行可执行文件Runtime ec=Runtime.getRuntime();ec.exec(String command);例 7-1:ec.exec(“notepad

5、”);打开记事本例 7-2:打开 QQ 登录界面Runtime ec=Runtime.getRuntime();File file=new File(“QQ 绝对路径”,”QQ.exe”);try ec.exec(file.getAbsolutePath(); catch (IOException e) e.printStackTrace();例 7-3:打开浏览器Runtime ec=Runtime.getRuntime();File f=new File(“C:Program FilesInternet Explorer“,“iexplore.exe“);try ec.exec(f.get

6、AbsolutePath(); catch (IOException e) e.printStackTrace();例 7-4:打开浏览器,且打开设置好的界面Desktop dp=Desktop.getDesktop();try dp.browse(new .URI(“http:/ catch (IOException e1) e1.printStackTrace(); catch (Exception e1) e1.printStackTrace();二、 文件字节流1. 文件字节输入流 FileInputStream创建:FileInputStream(String name);FileI

7、nputStream(File file);方法:Int read();读出一个字符Int read(byte b);读取到数组 b 中,读出 b.length 的长度,返回实际读取的长度Int read(byte b,int off,int len);读取到数组 b 中,从 off 处开始,读出 len 长度,返回实际读取的长度当返回值为-1 时,读取完毕注意:要用 trycatch()读取结束后要用 close()关闭2. 文件字节输出流 FileOutputStream创建:FileOutputStream(String name);FileOutputStream(File file)

8、;方法:Public void write(byte b);Public void write(byte b,int off,int len);注意:要用 trycatch()写入结束后要用 close()关闭三、 文件字符流1. 文件字符输入流 FileReader创建:FileReader(String filename);FileReader(File filename);方法:Int read(); 读出一个字符Int read(char c); 读取到数组 c 中,返回实际读取的字符个数Int read(char c,int off,int len); 读取到数组 c 中,从 off

9、 开始,读取 len 个字符,返回实际读取的字符个数注意:要用 trycatch()写入结束后要用 close()关闭2. 文件字符输出流 FileWriter创建:FileWriter(String filename);FileWriter(File filename);方法:Void write(int n); 写入一个字符Void write(char c); 写入字符数组 cVoid write(char c,int off,int len); 将 c 从 off 开始的 len 个字符写入源注意:要用 trycatch()写入结束后要用 close()关闭四、 缓冲流缓冲流称为上层流

10、,它们的源和目的地必须是字符输入流和输出流,把字符输入输出流成为底层流,java 采用缓存技术将上层流和底层流连接,底层字符输入流首先将数据读取缓存,BufferedReader 流再从缓存读取数据;BufferedWriter 流将数据写入缓存,底层字符输出流会不断地将缓存中的数据写入到目的地。用 BufferedWriter 流调用 flush()刷新缓存或调用 close()方法关闭时,即使缓存没有溢出,底层流也会立刻将缓存的内容写入目的地。1. 缓冲输入流 BufferedReader创建:BufferedReader(Reader in);由于 FileReader 是 Reader

11、 的子类,所以常用下面的方法BufferedReader(FileReader in);方法:String readLine(); 读出一行字符,返回一个字符串,读取完毕返回 NullInt read(); 读出一个字符,读取完毕返回-1Int read(char c); 读取到数组 c 中,返回实际读取的字符个数, 读取完毕返回-1Int read(char c,int off,int len); 读取到数组 c 中,从 off 开始,读取 len 个字符,返回实际读取的字符个数, 读取完毕返回-1注意:要用 trycatch()写入结束后要用 close()关闭,先关闭 FileReade

12、r,在关闭 BufferedReader2. 缓冲输出流 BufferedWriter创建:BufferedWriter(Writer out); 由于 FileWriter 是 Writer 的子类,所以常用下面的方法BufferedWriter(FileWriter out);方法:Void newline(); 写入一个回车符Void write(int n); 写入一个字符Void write(char c); 写入字符数组 cVoid write(char c,int off,int len); 将 c 从 off 开始的 len 个字符写入源注意:要用 trycatch()写入结束

13、后要用 close()关闭,先关闭 BufferedWriter,再关闭 FileWriter五、 随机流1. RandomAccessFile 类的两个构造方法:RandomAccessFile(String name,String mode);RandomAccessFile(File file,String mode);RandomAccessFile 类既可以读取文件,也可以写入数据到文件,mode 取 r(只读)或rw(可读写) ,决定创建的流对文件的访问权限2. 方法:定位读写位置方法:seek(long a) 定位 RandomAccessFile 流的读写位置getFilePo

14、inter() 获取流的当前读写位置length() 获取文件长度读文件方法:readLine() 从文件读取一行文本,但如果有中文会出现乱码,需要先用 ISO-8859-1 重新编码,例:String str=in.readLine(); byte b=str.getBytes(“ISO-8859-1”);lString str=new String(b);read() 读取一个字节数据readChar()读取一个字符数据readByte()读取一个字节readInt(),readDouble(),readlong(),readShort()等写文件方法:writeChars(String

15、s) 写一个字符串writeBytes(String s) 写一个字符串writeChar(char c)写一个字符write(byte b) 写 b.length 个字节到文件writeDouble(double v),writeFloat(float f),writeInt(int i)等等3. 注意:要用 trycatch()写入结束后要用 close()关闭六、 数组流数组流是以数组作为源,来写入和读取计算机内存的。数组流不对文件进行操作。1. 字节数组输入流 ByteArrayInputStream构造方法:ByteArrayInputStream(byte b);ByteArray

16、InputStream(byte b, int off, int len);数组 b 为输入流的源,从数组 b 里读出数据方法:Public int read();从源中顺序的读出一个字节Public int read(byteb);从源中读出 b.length 个字节,存放到数组 b 中,若未读出字节,返回-1Public int read(byteb,int off,int len);从源中读出 len 个字节,存放到数组 b 中,若未读出字节,返回-1注意:要用 trycatch()写入结束后要用 close()关闭2. 字节数组输出流构造方法:ByteArrayOutputStream

17、();ByteArrayOutputStream(int size);第一个构造方法的字节数组输出流指向一个默认大小为 32 字节的缓冲区,如果输出流向缓冲区写入的字节数大于缓冲区时,缓冲区的容量会自动增加。第二个构造方法构造的字节数组输出流指向的缓冲区的初始大小有参数 size 指定,如果输出流向缓冲区写入的字节数大于缓冲区时,缓冲区的容量会自动增加。方法:Public void write(byte b);向缓冲区写入数组 bPublic void write(int b);顺序的向缓冲区写入一个字节Public void write(byte b,int off,int len);写入数

18、组 b 中的 len 个字节Public byte toByteArray();返回输出流写入缓冲区的全部字节,用于读出例:ByteArrayOutputStream out=new ByteArrayOutputStream();try writer.write(“你好“.toByteArray();writer.close(); catch (IOException e1) e1.printStackTrace();ByteArrayInputStream in=new ByteArrayInputStream(out.toByteArray();注意:要用 trycatch()写入结束后

19、要用 close()关闭3. 字符数组输入流构造方法:CharArrayReader(char c);CharArrayReader(char c, int off, int len);数组 c 为输入流的源,从数组 c 里读出数据方法:Public int read();从源中顺序的读出一个字符Public int read(char c); 从源中读出 c.length 个字节,存放到数组 c 中,未读出字节,返回-1Public int read(char c,int off,int len);从源中读出 len 个字节,存放到数组 c 中,未读出字节,返回-1注意:要用 trycatc

20、h()写入结束后要用 close()关闭4. 字符数组输出流构造方法:CharArrayWriter();CharArrayWriter(int size); 方法:Public void write(char b);向缓冲区写入数组 bPublic void write(int b);顺序的向缓冲区写入一个字符Public void write(char b,int off,int len);写入数组 b 中的 len 个字符Public char toCharArray();返回输出流写入缓冲区的全部字符,用于读出例:CharArrayWriter out=new CharArrayWri

21、ter();try writer.write(“你好 “.toCharArray();writer.close(); catch (IOException e1) e1.printStackTrace();CharArrayReader in=new CharArrayReader (out.toCharArray();注意:要用 trycatch()写入结束后要用 close()关闭七、 数据流DataInputStream 和 DataOutputStream 这两个流很有用,它们允许程序按照机器无关的风格读取 Java 原始数据,即当读取一个数值时,不必再关心这个数值应当是多少个字节。构

22、造方法:DataInputStream(InputStream in):创建的数据输入流指向一个有参数 in 指定的底层输入流DataOutputStream(OutputStream out):创建的数据输出流指向一个由参数 out 指定的底层输出流一般用 FileInputStream 作为源方法:close() 关闭流readBoolean() 读取一个布尔值readByte() 读取一个字节readChar() 读取一个字符readDouble() 读取一个双精度浮点值readFloat() readInt() readlong() readShort() readUnsignedBy

23、te() readUnsignedShort() readUTF() 读取一个 UTF 字符串skipBytes(int n)跳过给定数量的字节writeBlloean(boolear v) writeBytes(String s) writeChars(String s) writeDouble(double v) writeFloat(float v) writeInt(int v) writeLong(long v) writeShort(int v) writeUTF(String s)八、 带进度条的输入流带进度条的输入流是以字节为输入的,其构造方法:ProgressMonitorI

24、nputStream(Component c,String s, InputStream);进度条在参数 c 指定的组件的正前方显示,若该参数取 null,则在屏幕的正前方显示。String s 是进度条上的文字,InputStream 是输入源,一般取 FileInputStream 类例:FileInputStream in=new FileInputStream(file);ProgressMonitorInputStream input=new ProgressMonitorInputStream(null, “读取中“, in);ProgressMonitor p=input.get

25、ProgressMonitor();获取进度条int i=0;String s=“; byte b=new byte30;while(i= input.read(b)!=-1)System.out.println(new String(b,0,i);Thread.sleep(200);/由于文件较小,为了看清进度条这里有意延缓 0.2s九、 对象流1. ObjectInputStreamInputStream 的子类创建:ObjectInputStream(InputStream in);一般用 FileInputStream 类似 BufferedReader方法:Object readOb

26、ject(); /返回 Object 类型,若要返回特定类,则用类型转换注意:要用 trycatch()写入结束后要用 close()关闭2. ObjectOutputStreamOutputStream 的子类创建: ObjectOutputStream(OutputStream out);一般用 FileOutputStrea 类似 BufferedWriter方法:writeObject(Object obj); /向文件写入类,写入的这个类必须是序列化的,即要implements Serializable注意:要用 trycatch()写入结束后要用 close()关闭十、 序列化和对

27、象克隆利用对象流,借用数组流来完成克隆。用数组流来作为输出的源,将对象输出到内存,然后再用数组流作为输入的源,将对象输出,即完成了克隆例:读出 JTextArea textArea 里的内容,克隆出 JTextArea cloneTextAreaByteArrayOutputStream outputStream=new ByteArrayOutputStream();ObjectOutputStream out=new ObjectOutputStream(outputStream);out.writeObject(textArea);ByteArrayInputStream inputSt

28、ream=new ByteArrayInputStream(outputStream.toByteArray();ObjectInputStream in=new ObjectInputStream(inputStream);JTextArea cloneTextArea=(JTextArea)in.readObject();注意:要用 trycatch()写入结束后要用 close()关闭十一、 文件锁1. 简介FileLock 和 FileChannel 类分别在 Java.nio 和 java.nio.channels 包中。输入输出流可以使用文件锁,下面以 RanndomAccessF

29、ile 类为例2. 建立流对象RanndomAccessFile input=new RanndomAccessFile(File file,”rw”);必须是 rw3. 得到信道 FileChannelFileChannel channel=input.getChannel();4. 得到文件锁 FileLockFileLock lock=channel.tryLock(); 或 FileLock lock=channel.lock();5. 上锁和解锁lock.release();/解锁/写入或读出等操作lock=channel.tryLock();/操作完后重新上锁十二、 使用 Scan

30、ner 解析文件1. 使用默认分隔标记默认分隔标记为空格和换行(回车)File file=new File(“C:UserspepsiDesktop“,“2.txt“);Scanner scanner=new Scanner(file);调用 next()方法依次返回 file 中的单词,如果最后一个单词已被返回, scanner 调用 hasNext()将返回 false,否则返回 true。Scanner 可以调用 nextInt(),nextDouble()返回数字,但若不是数字,会发生异常。例:int sum=0; int num=0;while(scanner.hasNext()tr

31、y int score=scanner.nextInt();sum+=score;num+;System.out.println(score); catch (Exception e) System.out.print(scanner.next();System.out.println(“总分为:“+sum+“,平均分为:“+(double)sum/num);2. 使用正则表达式用 useDelimiter(“正则表达式”)来作为分隔符,这样以后,用 scanner.next()读出来的就只有正则表达式约束后的值了File file=new File(“C:UserspepsiDesktop“

32、,“2.txt“);Scanner scanner=new Scanner(file);scanner.useDelimiter(“0123456789.+“);/匹配所有非数字字符串这时候,匹配了所有非数字字符,剩下的只是数字了,用 hasNext()可以,用hasNextDouble()可以,用 hasNextInt()也可以double sum=0;int num=0;while(scanner.hasNext()sum=sum+scanner.nextDouble();num+;或while(scanner.hasNextDouble()sum=sum+scanner.nextDouble();num+;或while(scanner.hasNextInt()sum=sum+scanner.nextInt();num+;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 网络科技 > Java

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报