- 浏览: 403992 次
- 性别:
- 来自: 秦皇岛
最新评论
-
prayjourney:
了解了,讲的不错
DataInputStream和DataOutputStream类 -
niunianss:
将字节退回的时候,需要添加判断,最后一个字符是英文时,实际数组 ...
PushbackInputStream -
cctt_1:
不要误人子弟,那根本就不是 解释器模式!!!那是Composi ...
Interpreter(解释器)模式 -
java-大神:
[i][i]引用引用引用引用[/img][/img][/img ...
BufferedReader和BufferedWriter -
百合不是茶:
你的程序在文件输入输出流中传入agrs[0]时,会报错越界 ...
DataInputStream和DataOutputStream类
1. File类:
不管是文件还是目录,在Java中都是以File的实例来表示,如下示例是指定查询某个目录下的所有文件与目录名称。File类是文件的抽象代表,若要作文件输出/输入,必须配合其他相关类来使用。
package ysu.hxy; import java.io.*; import java.util.*; public class FileDemo { public static void main(String[] args) { try { File file = new File(args[0]); if(file.isFile()) //是否为文件 { System.out.println(args[0] + "文件"); System.out.print(file.canRead()?"可读":"不可读"); System.out.print(file.canWrite()?"可写":"不可写"); System.out.println(file.length()+"字节"); } else { //列出所有文件及目录 File[] files = file.listFiles(); ArrayList<File> fileList = new ArrayList<File>(); for(int i=0;i<files.length;i++) { //先列出目录 if(files[i].isDirectory()) { //是否为目录 System.out.println("["+files[i].getPath()+"]"); } else { //文件先存入fileList,待会再列出 fileList.add(files[i]); } } //列出文件 for(File f : files) { System.out.println(f.toString()); } System.out.println(); } } catch(ArrayIndexOutOfBoundsException e) { System.out.println("using: java FileDemo pathname"); } } };
2. RandomAccessFile类:
使用此类可以在文件中随意地移动读取位置,使用它的seek()方法来指定文件存取的位置,指定的单位是字节。但是每次文件读取的长度需要自己来设定。下面两段代码示例了如何利用RandomAccessFile类来读取和写入文件,以学生的单条数据信息的长度为读写单位。
package ysu.hxy; public class Student { private String name; private int score; public Student() { setName("noname"); } public Student(String name,int score) { setName(name); this.score = score; } public void setName(String name) { //利用StringBuilder来固定字符长度 StringBuilder builder = null; if(name != null) builder = new StringBuilder(name); else builder = new StringBuilder(15); builder.setLength(15); //最长15字符 this.name = builder.toString(); } public void setScore(int score) { this.score = score; } public String getName() { return name; } public int getScore() { return score; } //每个数据固定写入34字节 //对于每个学生数据的实例在写入文件时,会固定以34字节的长度写入, //也就是15个字符(30字节)加上一个int整数的长度(4字节)。 public static int size() { return 34; } };
下面的代码示范了如何使用RandomAccessFile来写入文件,并可随机指定一个所想读出的数据。
package ysu.hxy; import java.io.*; import java.util.*; public class RandomAccessFileDemo { public static void main(String[] args) { Student[] students = { new Student("Justin",90), new Student("momore",95), new Student("Bush",88), new Student("caterpillar",84)}; try { File file = new File(args[0]); //建立以RandomAccessFile实例并以读写模式打开文件 RandomAccessFile randomAccessFile = new RandomAccessFile(file,"rw"); for(int i=0;i < students.length;i++) { //使用对应的write方法写入数据 randomAccessFile.writeChars(students[i].getName()); randomAccessFile.writeInt(students[i].getScore()); } Scanner scanner = new Scanner(System.in); System.out.println("读取第几个数据?"); int num = scanner.nextInt(); //使用seek()方法操作存取位置 randomAccessFile.seek((num-1)*Student.size()); Student student = new Student(); //使用对应的read方法读出数据 student.setName(readName(randomAccessFile)); student.setScore(randomAccessFile.readInt()); System.out.println("姓名:" + student.getName()); System.out.println("分数:" + student.getScore()); //设定关闭文件 randomAccessFile.close(); } catch(ArrayIndexOutOfBoundsException e) { System.out.println("请指定文件名称:"); } catch(IOException e) { e.printStackTrace(); } } private static String readName(RandomAccessFile randomAccessFile) throws IOException { char[] name = new char[15]; for(int i=0;i<name.length;i++) name[i]=randomAccessFile.readChar(); //将空字符取代为空格并返回 return new String(name).replace('\0',' '); } };
D:\hxy>java ysu.hxy.RandomAccessFileDemo Student.txt
读取第几个数据?
2
姓名:momore
分数:95
读写文件时的几个必要的流程:
(1) 打开文件并指定读写方式:在Java中,当实例化一个与文件相关的输入/输出类时,就会进行打开文件的动作。在实例化的时候要指定文件是以读出(r)、写入(w)、可读写(rw)的方式打开;
(2) 使用对应的写入方法:如writeInt()、writeChar()等;
(3) 使用对应的读出方法:如readInt()、readChar()等;
(4) 关闭文件:对于某些文件存取对象来说,关闭文件的动作意味着将缓冲区(Buffer)的数据全部写入文件,如果不作关闭文件的动作,某些数据可能没有写入文件而丢失。
3. 位流:Java将数据于目的地及来源之间的流动抽象化为一个流(Stream),而流当中流动的则是位数据。
(1) java.io.InputStream和java.io.OutputStream:
InputStream是所有表示位输入流的类之父类,是一个抽象类。InputStream是从装置来源地读取数据的抽象表示。如System中的标准输入流in对象就是一个InputStream类型的实例。在Java程序开始之后,in流对象就会开启,目的是从标准输入装置中读取数据。
OutputStream是所有表示位输出流的类之父类,也是一个抽象类。用于将数据写入目的地的抽象表示。在Java程序开始之后,out流对象就会开启,目的是将数据写到目的地装置。
4. FileInputStream和FileOutputStream
当建立一个FileInputStream和FileOutputStream的实例时,必须指定文件位置及文件名称,实例被建立时文件的流就会开启;而不使用流时,必须关闭文件流,以释放与相依的系统资源,完成文件读/写的动作。
FileInputStream可以使用read()方法一次读入一个字节,并以int类型返回,或者是使用read()方法时读入至一个byte数组,byte数组的元素有上,就读入多少个字节。这样的一个byte数组在文件读出与写入完成的过程中,经常充当缓冲区在中间承接数据的角色。
package onlyfun.caterpillar; import java.io.*; public class FileStreamDemo { public static void main(String[] args) { try { byte[] buffer = new byte[1024]; // 来源文件 FileInputStream fileInputStream = new FileInputStream(new File(args[0])/*直接用args[0]建立也可以 */); // 目的文件 FileOutputStream fileOutputStream = new FileOutputStream(new File(args[1])/*直接用args[0]建立也可以*/); // available()可取得未读取的数据长度 System.out.println("复制文件:" + fileInputStream.available() + "字节"); while(true) { if(fileInputStream.available() < 1024) { // 剩余的数据比1024字节少 // 一位一位读出再写入目的文件 int remain = -1; while((remain = fileInputStream.read()) != -1) { fileOutputStream.write(remain); } break; } else { // 从来源文件读取数据至缓冲区 fileInputStream.read(buffer); // 将数组数据写入目的文件 fileOutputStream.write(buffer); } } // 关闭流 fileInputStream.close(); fileOutputStream.close(); System.out.println("复制完成"); } catch(ArrayIndexOutOfBoundsException e) { System.out.println( "using: java FileStreamDemo src des"); e.printStackTrace(); } catch(IOException e) { e.printStackTrace(); } } }
程序中示范了两个read()方法,一个方法可以读入指定长度的数据至数组,另一个方法一次可以读入一个字节。每次读取之后,读取的光标都会往前进,如果读不到数据则返回-1,使用available()方法获得还有多少字节可以读取。
FileOutputStream默认会以新建文件的方式来开户流。如果指定的文件名称已经存在,则原文件会被覆盖;如果想以附加模式来写入文件,则可以在构建FileOutputStream实例时指定为附加模式。如:
FileOutputStream fileOutputStream = new FileOutputStream(args[1],true);
发表评论
-
内部类总结
2009-11-27 14:28 1180一、方法及作用域内的内部类:1.在一个方法内定义的类2.在一个 ... -
finalize()方法终结条件验证 示例代码
2009-09-20 09:23 1297package Initialization; clas ... -
Proxy(代理)模式二
2009-05-15 21:16 15192. 重新思考图像代理: 现在需要思考设计模式是否 ... -
Junit简介
2009-04-08 17:46 15551. 单元测试(Unit Test) 一个单元(Un ... -
Ant简介
2009-04-08 13:10 17471. Ant可以自动完成的任务: (1)编译Java源代 ... -
专题制作--文字编辑器(文字编辑与保存)
2009-04-08 10:43 21531. 文字编辑与保存: (1). 打开文件的处理流 ... -
专题制作--文字编辑器(逻辑实现部分)
2009-04-07 22:35 18591. 事件处理: 在Java中事件以具体的对象来表 ... -
专题制作--文字编辑器(接口部分)
2009-04-07 20:28 21051. Swing入门: 若要使用J2SE来开发窗口应用 ... -
信息绑定(国际化处理)
2009-04-07 20:02 15321. 程序中的一些文字信息可以将之定义在一个属性文件中,而不定 ... -
日志(Logging)
2009-04-07 16:14 16251. 日志(Logging) 程序不免会出现错误,当 ... -
Java中的日期和时间
2009-04-07 11:26 19171. 使用Date: 使用System.cu ... -
meta-annotation
2009-04-07 09:23 30191. 所谓meta-annotation就是Annotati ... -
Annotion
2009-04-06 23:05 16361. Annotation对程序运行没有影响,它的目的在于对编 ... -
使用反射生成与操作对象(二)
2009-04-06 17:04 17251. 修改成员值: 尽管直接存取类的域成员是不被鼓励的 ... -
使用反射生成与操作对象(一)
2009-04-06 15:16 20521. 使用反射机制,可以在运行时期动态加载类并生成对象,操作对 ... -
Java中的反射(二)
2009-04-06 10:42 19811. 当在命令行模式下执行java XXX.class 指令后 ... -
Java中的反射(一)
2009-04-06 09:43 12941. Java提供的反射机制允许您在运行时动态加载类、查看类信 ... -
容器类的线程安全及ThreadLocal类
2009-04-05 21:28 30171. 容器类默认没有考虑 ... -
wait()和notify()
2009-04-05 19:06 13251. wait()、notify()、notifyAll() ... -
Java线程之同步化(Synchronized)主题
2009-04-05 16:44 26771. 如果一个对象所持有的数据可以被多线程同时共享存取,必须 ...
相关推荐
java java输入输出 java输入流 java输出流 java java输入输出 java输入流 java输出流 java java输入输出 java输入流 java输出流
基础篇有JAVA环境搭建、Java语言基础、方法和数组、面向对象基础、Java常用类、继承与接口、成员访问控制与异常、JavaFX程序设计、Java输入输出流;进阶篇有反射、泛型、注解、网络编程、多线程、序列化、数据库、...
java输入输出处理 java输入输出处理 java输入输出处理 java输入输出处理 java输入输出处理 java输入输出处理
对java输入输出流与文件处理进行详细的阐述
关于java输入输出流的代码示例,可以通过这些示例学习
JAVa输入输出流 上课做的JAVa输入输出流程序,把一个文件中的东西读出写到另一个文件中
JAVA中,字节流和字符流的套用,提供IO输入输出的基本语法和步骤
java 输入输出流加密源码 里面详细介绍了加密流的代码,是文件的输入输出流,不过大同小异 其他io一样
只是输入输出的一个代码 我也是刚学java 有好多度不懂
java输入输出流和文件操作.pdf
实验三Java输入输出 (1)将键盘上输入的字符在屏幕上显示出来。 (2)将保存在本地机当前文件夹中的Ex3_2.HTML 文本文件的内容在屏幕上显示出来,然后将其另存为Ex3_2.txt 文件。 (3)保存对象信息到文件,并将文件中...
第十三章Java 输入输出流.rar第十三章Java 输入输出流.rar第十三章Java 输入输出流.rar
Java 输入输出大全
(1)先输入第一组操作数,并将其存放在一个文件中。 (2)然后输入第二组操作数,并将其存放在第二个文件中。 (3)选择一种加减乘除运算。 (4)从第一个文件中取第一个操作数,从第二个文件中取第二个操作数,将...
java输入输出流.ppt,详细介绍java的输入输出流,帮助你快速掌握java
Java输入输出流Java输入输出流
java输入输出流的简单例子
Java输入输出流.pdf
我们的第三次Java作业, 一个.java文件。一共有三个
java 输入输出流 I/O 实例 从文件读取信息,将处理过的信息写回文档。