JAVA流式输入输出与文件处理

JAVA流式输入输出与文件处理
JAVA流式输入输出与文件处理

流式输入输出与文件处理

实验目的

(1) 掌握字节流和字符流的特点和处理差异;

(2) 掌握过滤流的使用;

(3) 掌握File类的使用;

(4) 掌握随机文件的使用。

(5) 掌握对象系列化的概念以及访问文件时对象读写方法。

知识要点

1 面向字节的输入/输出流

(1)类InputStream是面向字节的输入流的根。其主要方法见表13-1。

表13-1 类InputStream的方法

该流实现DataInput接口,主要方法有:readByte(),readBoolean()、

readShort()、readChar()、readInt() 、readLong()、readFloat()、readDouble()、readUTF()等。

(3)类OutputStream是面向字节输出流的根,其主要方法有:

●void write(int b) :将参数b的低字节写入输出流

●void write(byte b[]) :将字节数组全部写入输出流

●void write(byte b[],int offset, int len):将字节数组中从b[offset]开始处的len个字节写入至输出流。

(4)类DataOutputStream实现各种类型数据的输出处理,它实现了DataOutput接口,主要方法有:writeByte(int)、writeBytes(String)、writeBoolean(boolean)、writeChars(String)、writeInt(int) 、writeLong()、writeFloat(float)、writeDouble(double)、writeUTF(String)等。

2 面向字符的输入与输出流

类Reader是面向字符的输入流的根,其提供的方法与InputStream类似,只是将基于Byte的参数改为基于Char。

类Writer是面向字符的输出流类的根,其提供的方法与OutputStream类似,只是将基于Byte的参数改为基于Char。

类InputStreamReader是一个特殊的流,用来将面向字节的数据流包装转换为面向字符的流。常用于从键盘获取输入数据。例如,从键盘输入一行字符串,可以用BufferedReader的readLine()方法,但在此前必须使用InputStreamReader将字节流转化为字符流。

BufferedReader in=new BufferedReader(new InputStreamReader(System.in));

String x=in.readLine()

3 文件的顺序读写

(1)面向字节的文件访问

●以二进制文件作为数据源。FileInputStream类和FileOutputStream类分别用于文件的读、写访问。

●利用InputStream和OutputStream的方法可实现文件的读写操作。

●可用DataInputStream对FileInputStream流进行过滤;用DataOuputStream对FileOutputStream流进行过滤,以实现特定数据类型数据的读写。

(2)面向字符的文件访问

●以字符文件作为数据源。包括:FileReader类和FileWriter类分别用于字符文件的读、写访问。

●基于字符流的数据读写方法与基于字节流的类似,只是将读写的单位由字节改为字符,方法中的字节数组参数相应改为字符数组。例如:

int read(char b[])表示从文件读数据填满数组,返回读到的字符数。

●可用BufferedReader对FileReader流进行过滤;用BufferedWriter对FileWriter流进行过滤,其中包含newLine()方法可写入一个换行。

4 File类

借助File对象,可以获取文件和相关目录的属性信息。其主要方法见表13-2。

表13-2 File类的主要方法

创建随机访问文件对象时要指定文件访问的“rw”参数,也就是它可以对同一打开文件进行读写两种访问。RandomAccessFile类实现了DataInput和DataOutput接口,为支持流的随机读写,RandomAccessFile类还添加定义了如下方法:

●long getFilePointer():返回当前指针;

●void seek(long pos):将文件指针定位到一个绝对地址;

●long length():返回文件的长度

注意:地址是相对于文件头的偏移量。地址0表示文件的开头。

6 对象序列化

(1)对象输入流ObjectInputStream和对象输出流ObjectOutputStream将Java流系统扩充到能输入输出对象,它们提供的writeObject()和readObject()方法实现了对象的串行化(Serialized)和反串行化(Deserialized)。

(2)用对象输入流的readObject()方法必须捕捉ClassNotFoundException异常。

(3)为了实现用户自定义对象的串行化,相应的类必须实现Serializable接口,否则,不能以对象形式正确写入文件。Serializable接口是一个不含任何具体内容的接口。

3 样例程序

样例1: 编写一个程序实现任意文件的拷贝功能,源文件和目的文件名由命令行参数提供。

【参考程序】

import java.io.*;

public class CopyFile {

public static void main(String args[]) {

if ( args.length<2) {

System.out.println("usage: java CopyFile sourcefile

targetfile");

System.exit(0);

}

byte[] b = new byte[1024];

try {

FileInputStream infile = new FileInputStream(args[0]);

FileOutputStream targetfile = new FileOutputStream(args[1]);

while (true) {

int byteRead=infile.read(b); //从文件读数据给字节数组

if (byteRead==-1) //在文件尾,无数据可读

break; //退出循环

targetfile.write(b,0,byteRead); //将读到的数据写入目标文件

}

targetfile.close();

System.out.println("copy success! ");

} catch(IOException e) { }

}

}

注:本样例演示面向字节的输入输出流的进行文件读写的方法。

【编程技巧】

(1) 创建一个字节数组存放从文件读取的数据;

(2) 利用FileInputStream对象的带字节数组参数的read方法从文件读数据,返回读到的字节数;利用FileOutputStream对象的带字节数组的write方法可将字节数组中指定的字节写入到目标文件。

(3) 利用循环控制文件的连续读写操作,在处理到文件结尾时,read方法返回-1,退出循环。

样例2:编写一个程序统计一个文本文件中字符A的个数,文件名由命令行参数提供。

【参考程序】

import java.io.*;

public class readtxt {

static String s;

/* 方法find查找字符串in中A的个数 */

public static int find(String in) {

int n=0;

int counter = 0;

while(n!=-1) {

n = in.indexOf((int)'A',n+1);

counter++;

}

return counter-1;

}

public static void main(String[] args) {

try{

int n=0;

FileReader file =new FileReader(args[0]);

BufferedReader in=new BufferedReader (file);

boolean eof=false;

while(!eof) {

String x=in.readLine(); //从文件读一行

if(x==null) { //判是否文件结束

eof=true;

}

else

s=s+x; //将内容拼接到字符串s上

}

System.out.print("the number of A is :"+find(s));

in.close();

}catch(IOException e){ };

}

}

注:本样例演示文本文件的数据读取方法。

【编程技巧】

(1) 循环利用BufferedReader的readLine()方法从文件读一行内容,读到文件尾部时将返回null;

(2) 将读到的数据拼接到字符串s中,最后执行find方法找出A的个数。

样例3:设计一

个图形界面的文

本文件查阅工具,

在窗体中安排一

个文本域和一个

按钮(如图13-1

所示),文本域

用来显示文件的

内容,点击打开

按钮将弹出文件

选择对话框(如

图13-2所

示),从而可以

选择要查看的文

件。

【参考程序】

import java.awt.*;

import java.awt.event.*;

import java.io.*;

public class FileViewer extends Frame implements ActionListener { String directory; //文件选择对话框的默认目录

TextArea textarea; // 显示文件内容的文本域

public FileViewer() { this(null, null); }

public FileViewer(String filename) { this(null, filename); } public FileViewer(String directory, String filename) {

addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e) {

dispose();

}

});

textarea = new TextArea("", 24, 80);

textarea.setFont(new Font("宋体", Font.PLAIN, 12));

textarea.setEditable(false);

this.add("Center", textarea);

Panel p = new Panel();

p.setLayout(new FlowLayout(FlowLayout.RIGHT, 10, 5));

this.add(p, "South");

Button openfile = new Button("Open File");

openfile.addActionListener(this);

openfile.setActionCommand("open");

openfile.setFont(new Font("SansSerif", Font.BOLD, 14));

p.add(openfile);

this.pack();

// 根据文件名路径得到目录,否则为系统当前目录.

if (directory == null) {

File f;

if ((filename != null) && (f = new

File(filename)).isAbsolute()) {

//如果文件名中给出了绝对路径,则可根据创建的File对象得到文件的目录路径和文件名

directory = f.getParent();

filename = f.getName();

}

else directory = System.getProperty("user.dir"); //系统当前目录

}

this.directory = directory; //记住文件打开对话框的默认目录

setFile(directory, filename); // 装载显示文件

}

/* 从特定目录装载文件 */

public void setFile(String directory, String filename) {

if ((filename == null) || (filename.length() == 0)) return;

File f;

FileReader in = null;

try {

f = new File(directory, filename); // 创建文件对象

in = new FileReader(f); // And a char stream to read it char[] buffer = new char[4096]; // 每次读 4K字符

int len; // 每次读到的字符数

textarea.setText("");

while((len = in.read(buffer)) != -1) {

String s = new String(buffer, 0, len);

textarea.append(s); //读到的字符串添加到文本域

}

this.setTitle("FileViewer: " + filename); // 设置窗体标题 textarea.setCaretPosition(0); //将光标定到文本域的开头 }

catch (IOException e) {

textarea.setText(e.getClass().getName() + ": " +

e.getMessage());

this.setTitle("FileViewer: " + filename + ": I/O

Exception");

}

// 任何情况下均要记住关闭流

finally { try { if (in!=null) in.close(); } catch (IOException

e) {} }

}

public void actionPerformed(ActionEvent e) {

String cmd = e.getActionCommand();

if (cmd.equals("open")) {

FileDialog f = new FileDialog(this, "Open File",

FileDialog.LOAD);

f.setDirectory(directory); //设置文件打开对话框的默认目录

f.show();

directory = f.getDirectory(); // 记住新的默认目录

setFile(directory, f.getFile()); // 装载显示文件

f.dispose(); // 得到文件后自动关闭对话框

}

}

public static void main(String[] args) throws IOException {

Frame f = new FileViewer((args.length == 1)?args[0]:null);

f.addWindowListener(new WindowAdapter() {

public void windowClosed(WindowEvent e) { System.exit(0); } });

f.setVisible(true);

}

}

注:本样例演示File对象的使用以及读取文本文件数据的方法。

【编程技巧】

(1) 如何利用File对象处理文件的目录和文件名,系统的当前目录如何得到;

(2) 创建一个字符数组用于存放从文件读到的字符,利用FileReader的read方法可从文件读数据填入字符数组,无数据可读时返回-1,利用它作为循环控制标记;

(3) FileViewer构造方法的多态性编写,从而适应各种应用情形;

(4) FileDialog的使用,文件默认目录路径的设置和获取新默认路径的办法,新默认路径由对话框选择的路径决定。

上机练习

基本题

1)编写一个程序将多个文件的内容合并为一个文件,被合并的文件的文件名由命令行参数输入。例如: java merge x1.txt x2.txt x3.txt x4.txt

2)从一个文本文件中读入30个学生的姓名和成绩,计算所有学生的最高分、最低分、平均分,将情况写入另一个文本文件中。

3)将以下程序补充完整,调试分析

import java.io.*;

public class Java_1 {

public static void main(String[] args) {

char[] charArray = {'a','b','c','d','e','f','g','h','i'};

char c ;

try{

//*********Found**********

DataOutputStream out = new ______________________(

new FileOutputStream("test.dat"));

for(int i =0; i

out.writeChar(charArray[i]);

}

out.close();

DataInputStream in = new DataInputStream(

//*********Found**********

new FileInputStream("____________________"));

while(in.available() != 0){

c=in.readChar();

System.out.print(c+" ");

}

System.out.println();

//*********Found**********

in.____________________();

}catch(IOException e){}

}

}

提高题

1)编写一个程序从一个文本文件中读入数据,统计其中不含重复的单词个数,并按单词出现频度有高到低输出。

2)编写应用程序实现图形的存储管理.

?能实现直线和圆的绘制;

?将绘制的图形以对象形式写入到文件中;

?载入文件时能将图形绘制和修改,继续保存到文件中。

3)利用随机文件存储人员电话号码,编程支持如下功能:查询某人的电话号码;增加、删除人员;修改人员电话号码。

思考题

1)以下哪个是RandomAccessFile文件的构造方法:

A.RandomAccessFile("data", "r");

B.RandomAccessFile("r", "data");

C.RandomAccessFile("data", "read");

D.RandomAccessFile("read", "data");

2)设有如下代码:

import java.io.*;

public class Th{

public static void main(String argv[]){

Th t = new Th();

t.amethod();

}

public void amethod(){

try{

ioCall();

}catch(IOException ioe){}

}

}

以下哪个最有可能是ioCall方法的方法体?

A. public void ioCall () throws IOException{

DataInputStream din = new DataInputStream(System.in);

din.readChar();

}

B. public void ioCall () throw IOException{

DataInputStream din = new DataInputStream(System.in);

din.readChar();

}

C. public void ioCall (){

DataInputStream din = new DataInputStream(System.in);

din.readChar();

}

D. public void ioCall throws IOException(){

DataInputStream din = new DataInputStream(System.in);

din.readChar();

}

3)当前目录不存在名为Hello.txt的文件,执行下面代码的输出结果为?

import java.io.*;

public class Mine{

public static void main(String argv[]){

Mine m=new Mine( );

System.out.println(m.amethod());

}

public int amethod(){

try{

FileInputStream file=new FileInputStream("Hello.txt");

}

catch(FileNotFoundException e){

System.out.print("No such file found");

return -1;

}

catch(IOException e){

System.out.print("Doing finally");

}

return 0;

}

}

A. No such file found

B. No such file found-1

C. No such file foundDoing finally-1

D. 0

4)使用哪个类可创建目录?

A. File B. DataOutput C. Directory

D. FileDescriptor E. FileOutputStream

5)假设raf是一个随机访问文件,以下语句的编译和运行结果为?

raf.seek( raf.length() );

A.代码不能编译.

B.会出现IOException

C.文件指针将定位到文件的最后一个字符之前

D.文件指针将定位到文件的最后一个字符

6)以下哪些是FileOutputStream 构造方法的合法形式?

A. FileOutputStream( FileDescriptor fd )

B. FileOutputStream( String n, boolean a )

C. FileOutputStream( boolean a )

D. FileOutputStream()

E. FileOutputStream( File f )

7)以下哪个能编译通过?

A.File f = new File("/","autoexec.bat");

B. DataInputStream d = new DataInputStream(System.in);

C. OutputStreamWriter o = new OutputStreamWriter(System.out);

D. RandomAccessFile r = new RandomAccessFile("OutFile");

8)以下程序的调试结果为:

import java.io.*;

class Base{

public void amethod()throws FileNotFoundException{}

}

public class ExcepDemo extends Base{

public static void main(String argv[]){

ExcepDemo e = new ExcepDemo();

}

public void amethod(){}

protected ExcepDemo(){

try{

DataInputStream din = new DataInputStream(System.in);

System.out.println("Pausing");

din.readByte();

System.out.println("Continuing");

this.amethod();

}catch(IOException ioe) { }

}

}

A. 由于构造方法为protected导致编译出错

B. 由于amethod方法未声明异常导致编译出错

C. 由于amethod方法未声明异常导致运行错误

D. 输出显示 "Pausing",击键后显示"Continuing"

实验9 Java输入输出流

山西大学计算机与信息技术学院 实验报告 姓名学号专业班级 课程名称 Java实验实验日期2013-12-4 成绩指导教师批改日期实验名称实验9 Java的输入输出流 ●实验目的 1. 理解I/O流的概念,掌握其分类 2. 掌握文本文件读写、二进制文件读写 ●实验内容 1. 分别使用FileWriter 和BufferedWriter 往文件中写入1万个随机数,比较用时的多少?(用时采用方法System.currentTimeMillis())求时间差; 使用:FileWriter 程序源代码 package a; import java.io.*; public class Filewriter { public Filewriter(String string){ } public static void main(String[] args)throws IOException { long time =System.currentTimeMillis(); Filewriter filewriter=new Filewriter("text"); int num; for(int i=0;i<=10000;i++){ num=(int)Math.random()*10000; filewriter.write(num+" "); } filewriter.close(); time=System.currentTimeMillis()-time; System.out.println("使用Filewriter所用时间:"+time+"um"); } private void write(String string){ } private void close(){ } }

java文件流操作

java 文件流操作 2010-05-08 20:17:23| 分类:java SE | 标签:|字号大中小订阅 java中多种方式读文件 一、多种方式读文件内容。 1、按字节读取文件内容InputStream 读取的是字节 2、按字符读取文件内容InputStreamReader 读取的是字符 3、按行读取文件内容BufferredReader 可以读取行 4、随机读取文件内容 import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.RandomAccessFile; import java.io.Reader; public class ReadFromFile { /** * 以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。* @param fileName 文件的名 */ public static void readFileByBytes(String fileName){ File file = new File(fileName); InputStream in = null; try { System.out.println("以字节为单位读取文件内容,一次读一个字节:"); // 一次读一个字节 in = new FileInputStream(file); int tempbyte; while((tempbyte=in.read()) != -1){ System.out.write(tempbyte); } in.close(); } catch (IOException e) { e.printStackTrace(); return; } try { System.out.println("以字节为单位读取文件内容,一次读多个字节:"); //一次读多个字节

Java 输入输出流及文件读写详解

I/O类体系 在JDK API中,基础的IO类都位于java.io包,而新实现的IO类则位于一系列以java.nio开头的包名中,这里首先介绍java.io包中类的体系结构。 按照前面的说明,流是有方向的,则整个流的结构按照流的方向可以划分为两类: 1、输入流: 该类流将外部数据源的数据转换为流,程序通过读取该类流中的数据,完成对于外部数据源中数据的读入。 2、输出流: 该类流完成将流中的数据转换到对应的数据源中,程序通过向该类流中写入数据,完成将数据写入到对应的外部数据源中。 而在实际实现时,由于JDK API历史的原因,在java.io包中又实现了两类流:字节流(byte stream)和字符流(char stream)。这两种流实现的是流中数据序列的单位,在字节流中,数据序列以byte为单位,也就是流中的数据按照一个byte一个byte的顺序实现成流,对于该类流操作的基本单位是一个byte,而对于字节流,数据序列以char为单位,也就是流中的数据按照一个char一个插入的顺序实现成流,对于该类流操作的基本单位是一个char。 另外字节流是从JDK1.0开始加入到API中的,而字符流则是从JDK1.1开始才加入到API中的,对于现在使用的JDK版本来说,这两类流都包含在API的内部。在实际使用时,字符流的效率要比字节流高一些。 在实际使用时,字符流中的类基本上和字节流中的类对应,所以在开始学习IO类时,可以从最基础的字节流开始学习。 在SUN设计JDK的IO类时,按照以上的分类,为每个系列的类设计了一个父类,而实现具体操作的类都作为该系列类的子类,则IO类设计时的四个体系中每个体系中对应的父类分别是: 字节输入流InputStream 该类是IO编程中所有字节输入流的父类,熟悉该类的使用将对使用字节输入流产生很大的帮助,下面做一下详细的介绍。 按照前面介绍的流的概念,字节输入流完成的是按照字节形式构造读取数据的输入流的结构,每个该类的对象就是一个实际的输入流,在构造时由API完成将外部数据源转换为流对象的操作,这种转换对程序员来说是透明的。在程序使用时,程序员只需要读取该流对象,就可以完成对于外部数据的读取了。

java对文件名的几个操作,获取文件扩展名,去掉扩展名

java对文件名的几个操作,获取文件扩展名,去掉扩展名 /** * Return the extension portion of the file's name . * * @see #getExtension */ public static String getExtension(File f) { return (f != null) ? getExtension(f.getName()) : ""; } public static String getExtension(String filename) { return getExtension(filename, ""); } public static String getExtension(String filename) { return getExtension(filename, ""); } public static String getExtension(String filename, String defExt) { if ((filename != null) && (filename.length() > 0)) { int i = https://www.360docs.net/doc/a613467751.html,stIndexOf('.'); if ((i >-1) && (i < (filename.length() - 1))) { return filename.substring(i + 1); } } return defExt; } public static String trimExtension(String filename) { if ((filename != null) && (filename.length() > 0)) { int i = https://www.360docs.net/doc/a613467751.html,stIndexOf('.'); if ((i >-1) && (i < (filename.length()))) { return filename.substring(0, i); } } return filename; } substring(参数)是java中截取字符串的一个方法 有两种传参方式

Java输入、输出流

第八章输入输出流 【课前思考】 1.字节流和字符流的基类各是什么? 2.什么是对象的串行化?对象串行化的作用是什么? 【学习目标】 本讲主要讲述了java语言中的输入/输出的处理,通过本讲的学习,同学们可以编写更为完善的java 程序。 【学习指南】 仔细阅读本章各知识点的内容, 深刻理解 java 语言中输入/输出流的处理方法,掌握处理问题的方法,多练习,多上机。 【难重点】 ●遇到实际问题时,要根据需要正确使用各种输入/输出流,特别是对中文使用适当的字符输入流。 ●正确使用对象串行化的方法。 ●处理字符流时,其构造方法的参数是一个字节流。 ●对象串行化的概念。 【知识点】 ●I/O 流概述 ●文件处理 ●过滤流 ●字符流的处理 ●对象的串行化 ●其它常用的流 【内容】 第一节数据流的基本概念 理解数据流 流一般分为输入流(Input Stream)和输出流(Output Stream)两类,但这种划分并不是绝对的。比如一个文件,当向其中写数据时,它就是一个输出流;当从其中读取数据时,它就是一个输入流。当然,键盘只是一个数人流,而屏幕则只是一个输出流。 Java的标准数据流 标准输入输出指在字符方式下(如DOS),程序与系统进行交互的方式,分为三种: 标准输入studin,对象是键盘。 标准输出stdout,对象是屏幕。 标准错误输出stderr,对象也是屏幕。 例 8.1 从键盘输入字符。 本例用System.in.read(buffer)从键盘输入一行字符,存储在缓冲区buffer中,count保存实际读入的字节个数,再以整数和字符两种方式输出buffer中的值。Read方法在java.io包中,而且要抛出IOException异常。程序如下: import java.io.*; public class Input1 { public static void main(String args[]) throws IOException { System.out.println("Input: ");

Java基础输入输出

Java基础输入输出 io包支持Java的基本I/O(输入/输出)系统,包括文件的输入/输出。对输入/输出的支持是来源于Java的内核API 库,而不是语言关键字。 一、输入/输出基础 很多实际的Java应用程序不是基于文本的控制台程序。尽管基于文本的程序作为教学实例是很出色的,它们无法胜任JA V A在实际中的重要应用。Java对外设输入/输出的支持也是有限的,并且用起来有些笨拙——甚至是在简单的例子程序中。基于文本的控制台输入/输出对于Java程序并不是十分重要。 Java 提供了与文件和网络相关的强大的和灵活的输入/输出支持,Java的输入/输出系统是紧密相连并且是具有一致性的。 1.1 流的概念 Java程序通过流来完成输入/输出。流是生产或消费信息的抽象。流通过Java的输入/输出系统与物理设备链接。尽管与它们链接的物理设备不尽相同,所有流的行为具有同样的方式。这样,相同的输入/输出类和方法适用于所有类型的外部设备。这意味着一个输入流能够抽象多种不同类型的输入:从磁盘文件,从键盘或从网络套接字。同样,一个输出流可

以输出到控制台,磁盘文件或相连的网络。流是处理输入/输出的一个洁净的方法,例如它不需要代码理解键盘和网络的不同。Java中流的实现是在java.io包定义的类层次结构内部的。 1.2 字节流和字符流 要使用流类,必须导入Java.io包。Java 2 定义了两种类型的流:字节类和字符类。字节流(byte stream)为处理字节的输入和输出提供了方便的方法。例如使用字节流读取或书写二进制数据。字符流(character stream)为字符的输入和输出处理提供了方便。它们采用了统一的编码标准,因而可以国际化。在某些场合,字符流比字节流更有效。在最底层,所有的输入/输出都是字节形式的。基于字符的流只为处理字符提供方便有效的方法。下面是对字节流和字符流的概述。 1.2.1 字节流类 字节流由两个类层次结构定义。在顶层有两个抽象类:InputStream 和OutputStream。每个抽象类都有多个具体的子类,这些子类对不同的外设进行处理,例如磁盘文件,网络连接,甚至是内存缓冲区。字节流类显示于表1-1中。 表1-1 字节流类 流类含义 BufferedInputStream缓冲输入流 BufferedOutputStream缓冲输出流

Java 输入输出(含部分答案)

Java输入输出 知识点: 1、文件和流的操作,理解字节流和字符流的概念 2、异常处理的概念,自定义异常类 一、选择题 1、如果一个程序段中有多个catch,则程序会按如下哪种情况执行( ) A)找到合适的例外类型后继续执行后面的catch B)找到每个符合条件的catch都执行一次 C)找到合适的例外类型后就不再执行后面的catch D)对每个catch都执行一次 2、程序员将可能发生异常的代码放在()块中,后面紧跟着一个或多个()块。 A) catch、try B) try、catch C) try、exception D) exception、try 3、在Java语言中,在程序运行时会自动检查数组的下标是否越界,如果越界,会抛掷下面的异常( ) A) SQLException B) IOException C) ArrayIndexOutOfBoundsExcetion D) SecurityManager 4、在Java中,关于捕获异常的语法try-catch-finally的下列描述哪些正确( ) A) try-catch必须配对使用B) try可以单独使用 C) try-finally必须配对使用D) 在try-catch后如果定义了finally,则finally肯定会执行 5、给定下面的代码片断: public class Animal{ public void Cat(){ try{ Method(); } catch(ArrayIndexOutBoundsException e) {"Exception1");} catch(Exception e) {"Exception2");} finally {"Hello World!!");} } public void Method() { } public static void main(String[] args) { =new Animal (); Ani. Cat (); } } 如果函数method正常运行并返回,会显示下面的哪些信息( ) A) Hello World B) Exception1 C) Exception2 D) Hello World!!

java File文件操作和文件流的详解(福哥出品)

一. 创建文件 (1)最常用的(获得一个固定路径下的文件对象) File parentFile = new File(“D:\\My Documents\\.....”);//参数是一个路径的字符串。 (2)在父目录创建一个名为child的文件对象,child 为文件对象的名字 File chileFile= new File(“D:\\My Documents\\.....”,String child); 或File chileFile= new File(parentFile,String child); 二,常见文件夹属性和方法 (1)createNewFile(); 该方法的作用是创建指定的文件。该方法只能用于创建文件,不能用于创建文 件夹,且文件路径中包含的文件夹必须存在 File file=new ("D:\\My Document\\text.txt"); file.createNewFile(); 这样就会在D盘下的My Document 创建text.txt的记事本(注意:首先得保 证D盘下有My Documen这个文件夹) (2)mkdir(); 根据File对象的名字(路径)创建一个目录(文件夹),如果是相对目录,则新建的目

录在当前目录下 (3)mkdirs(); 如果File对象名字有多级目录,则可以调用该方法一次性创建多级目录。 (4)exists(); 判断File对象指向的文件是否存在,返回一个boolean类型(5)isDirectory(); 判断File对象指向的文件是否为目录,返回一个boolean类型的值,true或者false。 (6)getName();获得文件名称(不带路径) (7)length(); 得到File对象指向文件的长度,以字节计算,返回一个长整形的值(long);注意:在 系统中,文件夹(目录)的大小为零,也就是不占用空间,使用length()时返回的是0 (8)delete(); 删除File对象所指定的文件 (9)isFile(); 判断File对象指向的文件是不是标准文件(就像图片,音乐文件等) 三,文件的属性和方法 1.File.separator 当前操作系统的名称分隔符,等于字符串“\”.

Java的输入与输出流(实验报告)

成都大学实验报告 实验项目名称Java的输入与输出流 一、实验目的: 1. 理解I/O流的概念,掌握其分类 2. 掌握文本文件读写、二进制文件读写 二、实验内容(包括源程序及相关说明): 1. 分别使用FileWriter 和 BufferedWriter 往文件中写入10万个随机数,比较用时。源代码如下: (1) import .*; public class Ex1_1 { public static void main(String[] args) throws IOException{ long t=(); FileWriter fw =new FileWriter("d:\\"); for(int i=1;i<=100000;i++) { ((int)()*10000)+" \n"); } (); t=()-t; "The elapsed: "+t); } } (2) import .*; public class Ex1_1 { public static void main(String[] args) throws IOException{ long t=(); BufferedWriter fw=new BufferedWriter(new FileWriter("d:\\")); for(int i=1;i<=100000;i++){

((int)()*10000)+"\n"); } (); t=()-t; "The elapsed: "+t); } } 2. 生成一个 html文件,使其能显示2的幂次(0~9)的表格如下: 代码如下: import .*; public class Ex1_1 { public static void main(String[] args) throws IOException{ BufferedWriter bw=new BufferedWriter(new FileWriter("d:\\")); ("

"); (); (""); for(int i=0;i<=9;i++){ (""); } ("
Power of 2Value
"+i+""+(i, 2)+"
"); (); (); } } 3. 在文本文件中包含有很长篇幅的英语短文,编写程序要求统计文件的所有短文中包含英文字母“A”的个数,并显示统计的时间。 第一种实现方法 代码如下: import class EXP1_1 { public static void main(String[] args) throws IOException{ long t =(); String filename="D:\\"; FileInputStream fis=new FileInputStream(filename); int count=0;

Java流(文件读写操作)

Java流 一、流的分类 ?按数据流动方向 –输入流:只能从中读取字节数据,而不能向其写出数据 –输出流:只能向其写入字节数据,而不能从中读取数据?按照流所处理的数据类型 –字节流:用于处理字节数据。 –字符流:用于处理Unicode字符数据。 ?按照流所处理的源 –节点流:从/向一个特定的IO设备读/写数据的流。(低级流)–处理流:对已存在的流进行连接和封装的流。(高级流)二、缓冲流 ?缓冲流要“套接”在相应的节点流之上,对读写的数据提供了缓冲的功能,提高了读写的效率,同时增加了一些新的方法。 ?J2SDK提供了四种缓存流: –BufferedReader –BufferedWriter –BufferedInputStream s –BufferedOutputStream

?缓冲输入流支持其父类的mark()和reset()方法: –mark()用于“标记”当前位置,就像加入了一个书签,可以使用reset()方法返回这个标记重新读取数据。?BufferedReader提供了readLine()方法用于读取一行字符串(以\r 或\n分隔)。 ?BufferedWriter提供了newLine()用于写入一个行分隔符。 ?对于输出的缓冲流,写出的数据会先在内存中缓存,使用flush()方法将会使内存中的数据立刻写出。 三、类层次 3.1、InputStream类层次

3.2、OutputStream类层次 3.3、Reader类层次

3.4、Writer类层次 四、常用的字符流与字节流的转化 说明: 1.字节流用于读写诸如图像数据之类的原始字节流。 2.字符流用于读写诸如文件数据之类的字符流。 3.低级流能和外设交流。 4.高级流能提高效率。 5.InputStreamReader 是字节流通向字符流的桥梁。 6.OutputStreamWriter 是字符流通向字节流的桥梁。

java第九章输入输出文件练习

第9章I/O系统 一、选择题 1、下列数据流中,属于输入流的是(b ) A. 从内存流向硬盘的数据流 B. 从键盘流向内存的数据流 C. 从键盘流向显示器的数据流 D. 从网络流向显示器的数据流 2、Java语言中提供输入输出流的包是(d ) A. java.sql B. java.util C. java.math D. java.io 3、下列流中哪一个使用了缓冲区技术?( a ) A. BufferedOutputStream B. FileInputStream C. DataOutputStream D. FileReader 4、下列说法,错误的是( a ) A. FileReader是用文件字节流的读操作 B. PipedInputStream 用于字节流管道流的读操作 C. Java的I/O流包括字符流和字节流 D. DataInputStream被称为数据输入流 5、下列程序建立一个myFile.dat文件,并且允许按照不同的数据类型向里面写入数据,选择正确的一项填入程序的横线处( c )。 Import java.io.* Public class Test1{ Public static void main(String[] args){ Try{ FileOutputStream fos=new FileOutputStream(“myFile.dat”); }catch(Exception e){ e.printStackTrace( ); } } } A.OutputStream os=new OutputStream(fos); B.DataOutputStream dos=new DataOutputStream( ); C.DataOutputStream dos=new DataOutputStream(fos ); D.FileOutputStream fos=new FileOutputStream(fos); 6、下列说法错误的是(b ) A. java的标准输入对象为System.in B. 打开一个文件时不可能产生IOException C. 使用File对象乐意判断一个文件是否存在 D. 使用File对象可以判断一个目录是否存在 二、填空题 1、按照流的处理数据的基本单位,I/O流包括输入输入流和输出流。 2、java中,将用于向java程序输入数据的数据源构造成输入流,java通过输出流向目的地输出数据。 3、java中,所有的输入流类都是Inputstream 类或者Reader 类的子类,它们 都继承了read() 方法用于读取数据。所有输出流类都是Outputstream 类或

java输入输出流和文件操作

Java IO流和文件操作Java流操作有关的类或接口: Java流类图结构:

1、File类 File类是对文件系统中文件以及文件夹进行封装的对象,可以通过对象的思想来操作文件和文件夹。 File类保存文件或目录的各种元数据信息,包括文件名、文件长度、最后修改时间、是否可读、获取当前文件的路径名,判断指定文件是否存在、获得当前目录中的文件列表,创建、删除文件和目录等方法。 构造方法摘要 File(File parent, String child) File(String pathname) File(String parent, String child) 构造函数 创建方法 1.boolean createNewFile() 不存在返回true 存在返回false 2.boolean mkdir() 创建目录 3.boolean mkdirs() 创建多级目录 删除方法 1.boolean delete() 2.boolean deleteOnExit() 文件使用完成后删除 例子1:列出指定文件夹的文件或文件夹 public class FileDemo1 { 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); } } } } } 例子2:文件过滤 import java.io.File; public class FileTest2 { public static void main(String[] args) { File file = new File("file"); String[] names = file.list(); for(String name : names) { if(name.endsWith(".java")) { System.out.println(name); }

实验9 Java输入输出流

▇▆大学计算机与信息技术学院 实验报告 姓名□□□学号▅▅▅▅专业班级▅▅ 课程名称 Java实验实验日期???? 成绩指导教师▇▇██批改日期实验名称实验9 Java的输入输出流 ●实验目的 1. 理解I/O流的概念,掌握其分类 2. 掌握文本文件读写、二进制文件读写 ●实验内容 1. 分别使用FileWriter 和BufferedWriter 往文件中写入1万个随机数,比较用时的多少?(用时采用方法System.currentTimeMillis())求时间差; 使用:FileWriter 程序源代码 import java.io.*; public class TestFileWriter { public static void main(String []args) throws IOException{ File f = new File("C:/java/tem.txt"); if (f.exists()){ System.out.printf("文件\"C:/java/tem.txt\"已存在"); System.exit(0); } FileWriter fileWriter = new FileWriter(f); long time = System.currentTimeMillis(); for(int i=0;i<10000;i++) fileWriter.write((int)(Math.random()*101)); fileWriter.close(); time = System.currentTimeMillis() - time; System.out.printf("使用FileWriter耗时:"+time+"毫秒"); } } 程序运行结果贴图 使用:BufferedWriter 程序源代码 import java.io.*; public class TestBufferedWriter { public static void main(String []args) throws IOException{ File f = new File("C:/java/tem2.txt");

java数据的输入和输出

JA V A数据的输入和输出 一、数据的输出 1、使用System.out.println(输出项)方法 System.out.println(输出项); 输出结果后换行。输出项可以是变量名、常量、表达式。 例: public class ex1 { public static main(String args[]) { System.out.println("欢迎学习JA V A"); //输出: 欢迎学习JA V A System.out.println(10*2+4); //输出: 24 System.out.println("a="+20); //输出: a=20 } } 2、使用System.out.print()方法 System.out.print(输出项); 在当前位置输出结果。 如: public class ex2 { public static void main(String args[]) { System.out.print("欢迎学习JA V A"); //输出: 欢迎学习JA V A System.out.print(10*2+4); //输出: 24 System.out.println("a="+20); //输出: a=20 System.out.println("b="+30); } }

3、使用javax.swing.JOptionPane包的showMessageDialog()方法 import javax.swing.JOptionPane; public class ex3 { public static void main(String[] args) { JOptionPane.showMessageDialog(null,"我学习JA V A,我快乐"); System.exit(0); } } 程序解释 (1)语句import javax.swing.JOptionPane;是导入语句,为编译器找到程序中要使用的类。(2)main()方法中的语句: JOptionPane.showMessageDialog(null,"我学习JA V A,我快乐"); 从类库加载的JOptionPane类中调用showMessageDialog()方法,这是一个显示对话框的方法。该方法有两个参数,第1个参数为null,第2参数是要显示的字符串,参数间用逗号分开。(3)System.exit(0)语句使用System类的exit()方法结束程序的运行。 二、数据的输入 1、使用命令行参数 main(String args[])方法的参数数组args接收命令行的参数,args[0]存放第一个参数字符串,args[1]存放第二个参数字符串,依此类推。 各个参数数组元素args[i]的值都是字符串,必须在main()方法中用相关的转换方法把字符串转换为对应的数据类型。(P142表10-1) 【例】从键盘上输入圆的半径,求圆的周长和面积。

java文件读写操作

1、按字节读取文件内容 2、按字符读取文件内容 3、按行读取文件内容 4、随机读取文件内容 public class ReadFromFile { /** * 以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。 */ public static void readFileByBytes(String fileName) { File file = new File(fileName); InputStream in = null; try { System.out.println("以字节为单位读取文件内容,一次读一个字节:"); // 一次读一个字节 in = new FileInputStream(file); int tempbyte; while ((tempbyte = in.read()) != -1) { System.out.write(tempbyte); }

in.close(); } catch (IOException e) { e.printStackTrace(); return; } try { System.out.println("以字节为单位读取文件内容,一次读多个字节:"); // 一次读多个字节 byte[] tempbytes = new byte[100]; int byteread = 0; in = new FileInputStream(fileName); ReadFromFile.showAvailableBytes(in); // 读入多个字节到字节数组中,byteread为一次读入的字节数 while ((byteread = in.read(tempbytes)) != -1) { System.out.write(tempbytes, 0, byteread); } } catch (Exception e1) { e1.printStackTrace(); } finally { if (in != null) { try {

JAVA输入输出和基本算法技巧

在有多行数据输入的情况下,一般这样处理, plaincopy 1.static Scanner in=new Scanner(System.in); 2.while(in.hasNextInt()) 3.或者是 4.while(in.hasNext()) 5.有关System.nanoTime()函数的使用,该函数用来返回最准确的可用系统计时器的当前值,以毫微秒为单位。 plaincopy 1.long startTime=System.nanoTime(); 2.//...the code being measured... 3.long estimatedTime=System.nanoTime()-startTime; 二、Java之输入输出处理 由于ACM竞赛题目的输入数据和输出数据一般有多组(不定),并且格式多种多样,所以,如何处理题目的输入输出是对大家的一项最基本的要求。这也是困扰初学者的一大问题。1.输入: 格式1:Scanner sc=new Scanner(new BufferedInputStream(System.in)); 格式2:Scanner sc=new Scanner(System.in); 在读入数据量大的情况下,格式1的速度会快些。 读一个整数:int n=sc.nextInt();相当于scanf("%d",&n);或cin>>n; 读一个字符串:String s=sc.next();相当于scanf("%s",s);或cin>>s; 读一个浮点数:double t=sc.nextDouble();相当于scanf("%lf",&t);或cin>>t; 读一整行:String s=sc.nextLine();相当于gets(s);或cin.getline(...); 判断是否有下一个输入可以用sc.hasNext()或sc.hasNextInt()或sc.hasNextDouble()或 sc.hasNextLine()

java文件流介绍

Input / Output:指跨越出JVM的边界,与外界数据的源头或者目标数据源进行数据交换. 输出Output -------------------------------> JVM 数据源 <------------------------------- 输入Input 注意:输入/输出是针对JVM 而言。 File 类 可表示一个文件,也有可能是一个目录(在JA V A中文件和目录都属于这个类中,而且区分不是非常的明显,可以调用isDirectory()和isFile()来判断)。 File file = new File("c:\\abc.txt"); 常用的方法: exists() 用来判断文件或目录是否在硬盘存在。 isDirectory() 判断是否是目录 isFile() 判断是否是文件 mkdir() 创建目录 mkdirs() 创建目录包括它下面的子目录。 getAbsolutePath() 得到文件绝对路径 list() 得到文件名的String数组(得到当前目录下的文件名,目录名) listFiles() 返回File类型数组,(目录,文件的File对象)可用getName()得到文件名。 delete() 删除文件 getName() 得到文件名 getPath() 得到文件相对路径 separtor() 得到文件分隔符//这个方法有更好的通用性,平台不同结果不同 deleteOnExit() 在进程退出的时候删除文件,常用在临时文件的删除。 1、流的概念: 输出流 程序----------->文件、网络 程序<-----------数据来源 输入流 2、流的分类: 按处理方式来分: 字节流:按8位传输InputStream OutputStream 字符流:按16位传输Reader Writer 按功能来分: 节点流:与文件、网络打交道的流,操作数据的来源 处理流(包装流):操作节点流

Java 输入输出 的 基本原理及示例

来自: 亿淘城_减肥榜的个人笔记 xx你的支持(*^__^*)嘻嘻…… Java I/O原理 →基本概念: I/O(Input/Output) 数据源(Data Source) 数据xx(Data Sink) →Java中把不同的数据源与程序间的数据传输都抽象表述为“流”(Stream),java.io包中定义了多种I/O流类型实现数据I/O功能。 →I/O流分类: 输入流(Input Stream)和输出流(Output Stream) 节点流(Node Stream)和处理流(Processing Stream) 字符流(Character Stream)和字节流(Byte Stream) #输入流(Input Stream)和输出流(Output Stream) 1.输入流只能从中读取数据,而不能向其写数据; 2.输出流则只能向其写出数据,而不能从中读取数据; 3.特例: java.io.RandomAccessFile类。 #节点流(Node Stream)和处理流(Processing Stream) 1.节点流直接连接到数据源

2.处理流是对一个已存在的流的连接和封装,通过所封装的刘的功能 调用实现增强的数据读写功能,处理流并不直接连到数据源#字符流(Character Stream)和字节流(Byte Stream) 1.字节流以字节为单位进行数据传输,每次传送一个或多个字节。 2.字符流以字符为单位进行数据传输,每次传送一个或多个字符。 ※Java命名惯例: 凡是以InputStream 或OutputStream结尾的类型均为字节流,凡是以Reader或Writer 结尾的均为字符流。 InputStream 抽象类java.io.InputStream 是所有字节输入流类型的父类,该类中定义了以字节为单位读取数据的基本方法,并在其子类中进行了分化和实现。 ◆三个基本的read方法: Int read() Int read(byte[] buffer) Int read(byte[] buffer,int offset,int length) ◆其它方法: Void close() Int available() Skip(long n) Boolean markSupported() Void mark(int readlimit) Void reset()

java输入输出流总结

一、数据流的基本概念 流一般分为输入流(Input Stream)和输出流(Output Stream)两类,但这种划分并不是绝对的。比如一个文件,当向其中写数据时,它就是一个输出流;当从其中读取数据时,它就是一个输入流。当然,键盘只是一个数人流,而屏幕则只是一个输出流。 java的标准数据流:标准输入输出指在字符方式下(如DOS),程序与系统进行交互的方式,分为三种: 标准输入studin,对象是键盘。 标准输出stdout,对象是屏幕。 标准错误输出stderr,对象也是屏幕。 二、java.io包中的数据流和文件类 字节流:从InputStream和OutputStream派生出来的一系列类。这类流以字节(byte)为基本处理单位。 InputStream、OutputStream FileInputStream、FileOutputStream PipedInputStream、PipedOutputStream ByteArrayInputStream、ByteArrayOutputStream FilterInputStream、FilterOutputStream DataInputStream、DataOutputStream BufferedInputStream、BufferedOutputStream 字符流:从Reader和Writer派生出的一系列类,这类流以16位的Unicode码表示的字符为基本处理单位。 Reader、Writer InputStreamReader、OutputStreamWriter FileReader、FileWriter CharArrayReader、CharArrayWriter PipedReader、PipedWriter FilterReader、FilterWriter BufferedReader、BufferedWriter StringReader、StringWriter 三、字节流方法 InputStream 和OutputStream read():从流中读入数据 skip():跳过流中若干字节数 available():返回流中可用字节数 mark():在流中标记一个位置 reset():返回标记过得位置 markSupport():是否支持标记和复位操作 close():关闭流 int read() :从输入流中读一个字节,形成一个0~255之间的整数返回(是一个抽象方法)。 int read(byte b[]) :读多个字节到数组中。 int read(byte b[], int off, int len):从输入流中读取长度为len的数据,写入数组b中从索引of f开始的位置,并返回读取得字节数。 write(int b) :将一个整数输出到流中(只输出低位字节,抽象) write(byte b[]) :将字节数组中的数据输出到流中 write(byte b[], int off, int len) :将数组b中从off指定的位置开始,长度为len的数据输出到流

相关文档
最新文档