输入输出流总结

输入输出流总结
输入输出流总结

输入、输出流总结

一、理解数据流

流一般分为输入流(Input Stream)和输出流(Output Stream)两类。

二、Java的标准数据流

标准输入输出指在字符方式下(如DOS),程序与系统进行交互的方式,分为三种:

标准输入studin,对象是键盘。

标准输出stdout,对象是屏幕。

标准错误输出stderr,对象也是屏幕。

三、字节流方法

字节流:从InputStream和OutputStream派生出来的一系列类。这类流以字节(byte)为基本处理单位。

InputStream、OutputStream

FileInputStream、FileOutputStream

PipedInputStream、PipedOutputStream

ByteArrayInputStream、ByteArrayOutputStream

FilterInputStream、FilterOutputStream

DataInputStream、DataOutputStream

BufferedInputStream、BufferedOutputStream

1、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中从索引off开始的位置,并返回读取得字节数。

write(int b) :将一个整数输出到流中(只输出低位字节,抽象)

write(byte b[]) :将字节数组中的数据输出到流中

write(byte b[], int off, int len) :将数组b中从off指定的位置开始,长度为len的数据输出到流中

flush():刷空输出流,并将缓冲区中的数据强制送出

close():关闭流

例:打开文件。

本例以FileInputStream的read(buffer)方法,每次从源程序文件OpenFile.java中读取512个字节,存储在缓冲区buffer中,再将以buffer中的值构造的字符串new String(buffer)显示在

屏幕上。程序如下:

import java.io.*;

public class OpenFile

{

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

{

try

{

//创建文件输入流对象

FileInputStream rf = new FileInputStream("OpenFile.java");

int n=512;

byte buffer[] = new byte[n];

while ((rf.read(buffer,0,n)!=-1) && (n>0)) //读取输入流

{

System.out.print(new String(buffer));

}

System.out.println();

rf.close();

//关闭输入流

}

catch (IOException ioe)

{

System.out.println(ioe);

}

catch (Exception e)

{

System.out.println(e);

}

}

}

例:写入文件。

本例用System.in.read(buffer)从键盘输入一行字符,存储在缓冲区buffer中,再以FileOutStream的write(buffer)方法,将buffer中内容写入文件Write1.txt中,程序如下:

import java.io.*;

public class Write1

{

public static void main(String args[])

{

try

{

System.out.print("Input: ");

int count,n=512;

byte buffer[] = new byte[n];

count = System.in.read(buffer); //读取标准输入流

FileOutputStream wf = new FileOutputStream("Write1.txt");

//创建文件输出流对象

wf.write(buffer,0,count); //写入输出流

wf.close();

//关闭输出流

System.out.println("Save to Write1.txt!");

}

catch (IOException ioe)

{

System.out.println(ioe);

}

catch (Exception e)

{

System.out.println(e);

}

}

}

2、管道流

管道用来把一个程序、线程和代码块的输出连接到另一个程序、线程和代码块的输入。java.io 中提供了类PipedInputStream和PipedOutputStream作为管道的输入/输出流

管道输入流作为一个通信管道的接收端,管道输出流则作为发送端。管道流必须是输入输出

并用,即在使用管道前,两者必须进行连接

管道输入/输出流可以用两种方式进行连接:

在构造方法中进行连接

PipedInputStream(PipedOutputStream pos); PipedOutputStream(PipedInputStream pis);

通过各自的connect()方法连接

在类PipedInputStream中,connect(PipedOutputStream

在类PipedOutputStream中,connect(PipedInputStream pis);

例:管道流。

本例例管道流的使用方法。设输入管道in 与输出管道out已连接,Send线程向输出管道out发送数据,Receive线程从输入管道in 中接收数据。程序如下:

import java.io.*;

public class Pipedstream

{

public static void main (String args[])

{

PipedInputStream in = new PipedInputStream();

PipedOutputStream out = new PipedOutputStream();

try

{

in.connect(out);

}

catch(IOException ioe) { }

Send s1 = new Send(out,1);

Send s2 = new Send(out,2);

Receive r1 = new Receive(in);

Receive r2 = new Receive(in);

s1.start();

s2.start();

r1.start();

r2.start();

}

}

class Send extends Thread //发送线程{

PipedOutputStream out;

static int count=0; //记录线程个数

int k=0;

public Send(PipedOutputStream out,int k)

{

this.out= out;

this.k= k;

this.count++;

//线程个数加1

}

public void run( )

{

System.out.print("\r\nSend"+this.k+":

"+this.getName()+" ");

int i=k;

try

{

while (i<10)

{

out.write(i);

i+=2;

sleep(1);

}

if (Send.count==1) //只剩一个线程时

{

out.close();

//关闭输入管道流

System.out.println(" out closed!");

}

else

this.count--;

//线程个数减1

}

catch(InterruptedException e) { }

catch(IOException e) { }

}

}

class Receive extends Thread //接收线程

{

PipedInputStream in;

public Receive(PipedInputStream in)

{

this.in = in;

}

public void run( )

{

System.out.print("\r\nReceive: "+this.getName()+" ");

try

{

int i = in.read();

while (i!=-1) //输入流未结束时

{

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

i = in.read();

sleep(1);

}

in.close();

//关闭输入管道流

}

catch(InterruptedException e) { }

catch(IOException e)

{

System.out.println(e);

}

}

}

程序运行结果如下:

Send1: Thread-0

Send2: Thread-1

Receive: Thread-2 1

Receive: Thread-3 2 3 4 5 7 out closed!

6 8 9 java.io.IOException: Pipe closed!

3、数据流

DataInputStream和DataOutputStream

在提供了字节流的读写手段的同时,

以统一的通用的形式向输入流中写入boolean,int,long,double等基本数据类型,并可以在次把基本数据类型的值读取回来。

提供了字符串读写的手段。

分别实现了DataInput和DataOutput接口

声明类:Public class DataInputStream extends filterInputStream implements DataInput

例:数据流。

本例演示数据流的使用方法。

程序如下:

import java.io.*;

public class Datastream

{

public static void main(String arg[])

{

String fname = "student1.dat";

new Student1("Wang").save(fname);

new Student1("Li").save(fname);

Student1.display(fname);

}

}

class Student1

{

static int count=0;

int number=1;

String name;

Student1(String n1)

{

this.count++;

//编号自动加1

this.number = this.count;

https://www.360docs.net/doc/9d14199899.html, = n1;

}

Student1()

{

this("");

}

void save(String fname)

{

try

{ / /添加方式创建文件输出流

FileOutputStream fout = new FileOutputStream(fname,true);

DataOutputStream dout = new DataOutputStream(fout);

dout.writeInt(this.number);

dout.writeChars(https://www.360docs.net/doc/9d14199899.html,+"\n");

dout.close();

}

catch (IOException ioe){}

}

static void display(String fname)

{

try

{

FileInputStream fin = new FileInputStream(fname);

DataInputStream din = new DataInputStream(fin);

int i = din.readInt();

while (i!=-1) //输入流未结束时

{

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

char ch ;

while

((ch=din.readChar())!='\n') //字符串未结束时

System.out.print(ch);

System.out.println();

i = din.readInt();

}

din.close();

}

catch (IOException ioe){}

}

}

程序运行结果如下:

1 Wang

Li

4、对象流

对象的持续性(Persistence)

能够纪录自己的状态一边将来再生的能力,叫对象的持续性

对象的串行化(Serialization)

对象通过写出描述自己状态的数值来记录自己的过程叫串行化。串行化的主要任务是写出对象实例变量的数值,如果变量是另一个对象的引用,则引用的对象也要串行化。这个过程是递归的

对象流

能够输入输出对象的流称为对象流。

可以将对象串行化后通过对象输入输出流写入文件或传送到其它地方

在java中,允许可串行化的对象在通过对象流进行传输。只有实现Serializable接口的类才能被串行化,Serializable接口中没有任何方法,当一个类声明实现Serializable接口时,只

是表明该类加入对象串行化协议

要串行化一个对象,必须与一定的对象输出/输入流联系起来,通过对象输出流将对象状态保存下来(将对象保存到文件中,或者通过网络传送到其他地方) ,再通过对象输入流将对象状态恢复

类ObjectOutputStream和ObjectInputStream分别继承了接口ObjectOutput和ObjectInput,将数据流功能扩展到可以读写对象,前者用writeObject()方法可以直接将对象保存到输出流中,而后者用readObject()方法可以直接从输入流中读取一个对象

例:对象流。

本例声明Student2为序列化的类。Save方法中,创建对象输出流out,并以添加方式向文件中直接写入当前对象out.writeObject(this);display方法中,创建对象输入流in,从文件中直接读取一个对象in.readObject(),获得该对象的类名、接口名等属性,并显示其中的成员变量。程序如下:

import java.io.*;

public class Student2 implements Serializable //序列化

{

int number=1;

String name;

Student2(int number,String n1)

{

this.number = number;

https://www.360docs.net/doc/9d14199899.html, = n1;

}

Student2()

{

this(0,"");

}

void save(String fname)

{

try

{

FileOutputStream fout = new FileOutputStream(fname);

ObjectOutputStream out = new ObjectOutputStream(fout);

out.writeObject(this);

//写入对象

out.close();

}

catch (FileNotFoundException fe){}

catch (IOException ioe){}

}

void display(String fname)

{

try

{

FileInputStream fin = new FileInputStream(fname);

ObjectInputStream in = new ObjectInputStream(fin);

Student2 u1 = (Student2)in.readObject(); //读取对象

System.out.println(u1.getClass().getName()+" "+

u1.getClass().getInterfaces()[0]);

System.out.println("

"+u1.number+" "+https://www.360docs.net/doc/9d14199899.html,);

in.close();

}

catch (FileNotFoundException fe){}

catch (IOException ioe){}

catch (ClassNotFoundException ioe) {}

}

public static void main(String arg[])

{

String fname = "student2.obj";

Student2 s1 = new Student2(1,"Wang");

s1.save(fname);

s1.display(fname);

}

}

程序运行结果如下:

Student2 interface java.io.Serializable 1 Wang

四、字符流的方法

1、字符流:从Reader和Writer派生出的一系列类,这类流以16位的Unicode码表示的字符为基本处理单位。

Reader、Writer

InputStreamReader、OutputStreamWriter

FileReader、FileWriter

CharArrayReader、CharArrayWriter

PipedReader、PipedWriter

FilterReader、FilterWriter

BufferedReader、BufferedWriter

StringReader、StringWriter

2、Reader类和Writer类

在JDK1.1之前,java.io包中的流只有普通的字节流(以byte为基本处理单位的流),这种流对于以16位的Unicode码表示的字符流处理很不方便。从JDK1.1开始,java.io包中加入了专门用于字符流处理的类,它们是以Reader和Writer为基础派生的一系列类

同类InputStream和OutputStream一样,Reader和Writer也是抽象类,只提供了一系列用于字符流处理的接口。它们的方法与类InputStream和OutputStream类似,只不过其中的参数换成字符或字符数组

1、Reader类

? void close()

? void mark(int readAheadLimit)

? boolean markSupported() :

? int read()

? int read(char[] cbuf)

? int read(char[] cbuf, int off, int len)

? boolean ready()

? void reset()

? long skip(long n)

2、Writer类

? void close()

? void flush()

? void write(char[] cbuf)

? void write(char[] cbuf, int off, int len)

? void write(int c)

? void write(String str)

? void write(String str, int off, int len)

例:文件编辑器。

本例实现文件编辑器中的打开、保存文件功能。程序如下:import java.awt.*; import java.awt.event.*; import java.io.*;

public class EditFile1 extends WindowAdapter

implements ActionListener,TextListener

{

Frame f;

TextArea ta1;

Panel p1;

TextField tf1;

Button b1,b2,b3;

FileDialog fd;

File file1 = null;

public static void main(String args[])

{

(new EditFile1()).display();

}

public void display()

{

f = new Frame("EditFile");

f.setSize(680,400);

f.setLocation(200,140);

f.setBackground(Color.lightGray);

f.addWindowListener(this);

tf1 = new TextField();

tf1.setEnabled(false);

tf1.setFont(new

Font("Dialog",0,20)); //设置文本行的初始字体

f.add(tf1,"North");

ta1 = new TextArea();

ta1.setFont(new

Font("Dialog",0,20)); //设置文本区的初始字体

f.add(ta1);

ta1.addTextListener(this);

//注册文本区的事件监听程序

p1 = new Panel();

p1.setLayout(new

FlowLayout(FlowLayout.LEFT));

b1 = new Button("Open");

b2 = new Button("Save");

b3 = new Button("Save As");

p1.add(b1);

p1.add(b2);

p1.add(b3);

b2.setEnabled(false);

b3.setEnabled(false);

b1.addActionListener(this);

//注册按钮的事件监听程序

b2.addActionListener(this);

b3.addActionListener(this);

f.add(p1,"South");

f.setVisible(true);

}

public void textValueChanged(TextEvent e)

{ //实现TextListener 接口中的方法,对文本区操作时触发

b2.setEnabled(true);

b3.setEnabled(true);

}

public void actionPerformed(ActionEvent e)

{

if (e.getSource()==b1) //单击[打开]按钮时

{

fd = new FileDialog(f,"Open",FileDialog.LOAD);

fd.setVisible(true);

//创建并显示打开文件对话框

if ((fd.getDirectory()!=null) && (fd.getFile()!=null))

{

tf1.setText(fd.getDirectory()+fd.getFile());

try

//以缓冲区方式读取文件内容

{

file1 = new File(fd.getDirectory(),fd.getFile());

FileReader fr = new FileReader(file1);

BufferedReader br = new BufferedReader(fr);

String aline;

while

((aline=br.readLine()) != null)//按行读取文本

ta1.append(aline+"\r\n");

fr.close();

br.close();

}

catch (IOException ioe)

{

System.out.println(ioe);

}

}

}

if ((e.getSource()==b2) || (e.getSource()==b3))

{ / /单击[保存]按钮时

if ((e.getSource()==b3) ||(e.getSource()==b2)&&(file1==null))

{ //单击[SaveAs]按钮时,或单击[Save]按钮且文件对象为空时

fd = new FileDialog(f,"Save",FileDialog.SAVE);

if (file1==null)

fd.setFile("Edit1.txt");

else

fd.setFile(file1.getName());

fd.setVisible(true);

//创建并显示保存文件对话框

if ((fd.getDirectory()!=null) && (fd.getFile()!=null))

{

tf1.setText(fd.getDirectory()+fd.getFile());

file1 = new File(fd.getDirectory(),fd.getFile());

save(file1);

}

}

else

save(file1);

}

}

public void save(File file1)

{

try

//将文本区内容写入字符输出流

{

FileWriter fw = new FileWriter(file1);

fw.write(ta1.getText());

fw.close();

b2.setEnabled(false);

b3.setEnabled(false);

}

catch (IOException ioe)

{

System.out.println(ioe);

}

}

public void windowClosing(WindowEvent e)

{

System.exit(0);

}

}

五、、文件操作类的方法File类

1、File类声明如下:

public class File ectends Object implements Serializable,Comparable 构造方法:

public File(String pathname)

public File(File patent,String child)

public File(String patent,String child)

2、文件名的处理

String getName( );//得到一个文件的名称(不包括路径)

String getPath( );//得到一个文件的路径名

String getAbsolutePath( );//得到一个文件的绝对路径名

String getParent( );//得到一个文件的上一级目录名

String renameTo(File newName); //将当前文件名更名为给定文件的完整路径

3、文件属性测试

boolean exists( );//测试当前File对象所指示的文件是否存在

boolean canWrite( );//测试当前文件是否可写

boolean canRead( );//测试当前文件是否可读

boolean isFile( );//测试当前文件是否是文件(不是目录)

boolean isDirectory( );//测试当前文件是否是目录

4、普通文件信息和工具

long lastModified( );//得到文件最近一次修改的时间

long length( ); //得到文件的长度,以字节为单位

boolean delete( ); //删除当前文件

5、目录操作

boolean mkdir( ); //根据当前对象生成一个由该对象指定的路径

String list( ); //列出当前目录下的文件

6、文件过滤器

类FilterInputStream和FilterOutputStream分别对其他输入/输出流进行特殊处理,它们在读/写数据的同时可以对数据进行特殊处理。另外还提供了同步机制,使得某一时刻只有一个线程可以访问一个输入/输出流。

类FilterInputStream和FilterOutputStream分别重写了父类InputStream和OutputStream 的所有方法,同时,它们的子类也应该重写它们的方法以满足特定的需要

?要使用过滤流,首先必须把它连接到某个输入/输出流上,通常在构造方法的参数中指定所要连接的流:

– FilterInputStream(InputStream in);

– FilterOutputStream(OutputStream out);

注:这两个类是抽象类,构造方法也是保护方法

类BufferedInputStream和BufferedOutputStream实现了带缓冲的过滤流,它提供了缓冲机制,把任意的I/O流“捆绑”到缓冲流上,可以提高读写效率

?在初始化时,除了要指定所连接的I/O流之外,还可以指定缓冲区的大小。缺省大小的缓冲区适合于通常的情形;最优的缓冲区大小常依赖于主机操作系统、可使用的内存空间以及机器的配置等;一般缓冲区的大小为内存页或磁盘块等地整数倍,如8912字节或更小。– BufferedInputStream(InputStream in[, int size])

– BufferedOutputStream(OutputStream out[, int size])

7、文件对话框

随机文件操作

于InputStream 和OutputStream 来说,它们的实例都是顺序访问流,也就是说,只能对文件进行顺序地读/写。随机访问文件则允许对文件内容进行随机读/写。在java中,类

RandomAccessFile 提供了随机访问文件的方法。类RandomAccessFile的声明为:

public class RandomAccessFile extends Object implements DataInput, DataOutput

File:以文件路径名的形式代表一个文件

FileDescriptor:代表一个打开文件的文件描述

FileFilter & FilenameFilter:用于列出满足条件的文件

File.list(FilenameFilter fnf)

File.listFiles(FileFilter ff)

FileDialog.setFilenameFilter(FilenameFilter fnf)

? FileInputStream & FileReader:顺序读文件

? FileOutputStream & FileWriter:顺序写文件

? RandomAccessFile:提供对文件的随机访问支持

类RandomAccessFile则允许对文件内容同时完成读和写操作,它直接继承Object,并且同时实现了接口DataInput和DataOutput,提供了支持随机文件操作的方法

DataInput和DataOutput中的方法

?readInt(), writeDouble()…

int skipBytes(int n):将指针乡下移动若干字节

length():返回文件长度

long getFilePointer():返回指针当前位置

void seek(long pos):将指针调到所需位置

void setLength(long newLength):设定文件长度

构造方法:

RandomAccessFile(File file, String mode)

RandomAccessFile(String name, String mode)

mode 的取值

–“r” 只读. 任何写操作都将抛出IOException。

–“rw” 读写. 文件不存在时会创建该文件,文件存在时,原文件内容不变,通过写操作改变文件内容。

–“rws” 同步读写. 等同于读写,但是任何协操作的内容都被直接写入物理文件,包括文件内容和文件属性。

–“rwd” 数据同步读写. 等同于读写,但任何内容写操作都直接写到物理文件,对文件属性内容的修改不是这样。

例:自动更新文件。

本例使用File类对象对指定文件进行自动更新的操作。程序如下:

import java.io.*;

import java.util.Date;

import java.text.SimpleDateFormat;

public class UpdateFile

{

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

{

String fname = "Write1.txt"; //待复制的文件名

String childdir = "backup"; //子目录名

new

UpdateFile().update(fname,childdir);

}

public void update(String fname,String childdir) throws IOException

{

File f1,f2,child;

f1 = new File(fname);

//当前目录中创建文件对象f1

child = new File(childdir); //当前目录中创建文件对象child

if (f1.exists())

{

if (!child.exists()) //child不存在时创建子目录

child.mkdir();

f2 = new File(child,fname); //在子目录child中创建文件f2

if (!f2.exists() || //f2不存在时或存在但日期较早时

f2.exists()&&(https://www.360docs.net/doc/9d14199899.html,stModified() > https://www.360docs.net/doc/9d14199899.html,stModified()))

copy(f1,f2);

//复制

getinfo(f1);

getinfo(child);

}

else

System.out.println(f1.getName()+" file not found!");

}

public void copy(File f1,File f2) throws IOException

{

//创建文件输入流对象

FileInputStream rf = new FileInputStream(f1);

FileOutputStream wf = new FileOutputStream(f2);

//创建文件输出流对象

int count,n=512;

byte buffer[] = new byte[n];

count = rf.read(buffer,0,n); //读取输入流

while (count != -1)

{

wf.write(buffer,0,count);

//写入输出流

count = rf.read(buffer,0,n);

}

System.out.println("CopyFile

"+f2.getName()+" !");

rf.close();

//关闭输入流

wf.close();

//关闭输出流

}

public static void getinfo(File f1) throws IOException

{

SimpleDateFormat sdf;

sdf= new SimpleDateFormat("yyyy 年MM月dd日hh时mm分");

if (f1.isFile())

System.out.println("\t"+f1.getAbsoluteP ath()+"\t"+

f1.length()+"\t"+sdf.format(new

Date(https://www.360docs.net/doc/9d14199899.html,stModified())));

else

{

System.out.println("

\t"+f1.getAbsoluteP ath());

File[] files = f1.listFiles();

for (int i=0;i

getinfo(files[i]);

}

}

}

例:随机文件操作。

本例对一个二进制整数文件实现访问操作当以可读写方式“rw“打开一个文件”prinmes.bin “时,如果文件不存在,将创建一个新文件。先将2作为最小素数写入文件,再依次测试100以内的奇数,将每次产生一个素数写入文件尾。

程序如下:import java.io.*;

public class PrimesFile

{

RandomAccessFile raf;

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

{

(new PrimesFile()). createprime(100);

}

public void createprime(int max) throws IOException

{

raf=new

RandomAccessFile("primes.bin","rw");//创建文件对象

raf.seek(0);

//文件指针为0

raf.writeInt(2);

//写入整型

int k=3;

while (k<=max)

{

if (isPrime(k))

raf.writeInt(k);

k = k+2;

}

output(max);

raf.close();

//关闭文件

}

public boolean isPrime(int k) throws IOException

{

int i=0,j;

boolean yes = true;

try

{

raf.seek(0);

int count = (int)(raf.length()/4); //返回文件字节长度

while ((i<=count) && yes)

{

if (k % raf.readInt()==0) //读取整型

yes = false;

else

i++;

raf.seek(i*4);

//移动文件指针

}

} catch(EOFException e) { } //捕获到达文件尾异常

return yes;

}

public void output(int max) throws IOException

{

try

{

raf.seek(0);

System.out.println("[2.."+max+"]中有"+

(raf.length()/4)+" 个素数:");

for (int i=0;i<(int)(raf.length()/4);i++)

{

raf.seek(i*4);

System.out.print(raf.readInt()+" ");

if ((i+1)%10==0) System.out.println();

}

} catch(EOFException e) { }

System.out.println();

}

}

程序运行时创建文件“primes.bin“,并将素数写入其中,结果如下:

[2..100]中有25 个素数:

2 3 5 7 11 13 17 19 23 29

31 37 41 43 47 53 59 61 67 71

73 79 83 89 97

六、Java中Scanner的用法

Scanner是SDK1.5新增的一个类,可是使用该类创建一个对象.

Scanner reader=new Scanner(System.in);

然后reader对象调用下列方法(函数),读取用户在命令行输入的各种数据类型: next.Byte(),nextDouble(),nextFloat,nextInt(),nextLin(),nextLong(),nextShot()

上述方法执行时都会造成堵塞,等待用户在命令行输入数据回车确认.例如,拥护在键盘输入12.34,hasNextFloat()的值是true,而hasNextInt()的值是false. NextLine()等待用户输入一个文本行并且回车,该方法得到一个String类型的数据。

下面是一个实例:

import java.util.*;

public class Example{

public static void main(String args[]){ System.out.println("请输入若干个数,每输入一个数用回车确认");

System.out.println("最后输入一个非数字结束输入操作");

Scanner reader=new Scanner(System.in); double sum=0;

int m=0;

while(reader.hasNextDouble()){

double x=reader.nextDouble();

m=m+1;

sum=sum+x;

}

System.out.printf("%d个数的和为%f/n",m,sum);

System.out.printf("%d个数的平均值是%f/n",m,sum/m);

}

}

七、JAVA的三种标准输入方法例子

例:

import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.util.Scanner;

public class SimpleIO {

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

byte b[] = new byte[50];

int num = System.in.read(b);

//用普通的System.in.read()读取;

String sb = new String(b,0,num);

System.out.println(sb);

BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //用缓冲流存放读取进来的

String sbr = br.readLine();

System.out.println(sbr);

Scanner scan = new Scanner(System.in);

//用扫描流对输入的数据

进行读取并进行咱存放。

if(scan.hasNext()){

String ss = scan.next();

System.out.println(ss);

}

}

}

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完成将外部数据源转换为流对象的操作,这种转换对程序员来说是透明的。在程序使用时,程序员只需要读取该流对象,就可以完成对于外部数据的读取了。

实验四 输入输出流程序设计

C++面向对象程序设计课程实验报告 课程名称C++面向对象程序设计班级实验日期2014.5.16-2012 .5.23 姓名学号实验成绩实验名称实验四输入输出流程序设计 实验目的及要求1.理解输入输出流的基本概念,明确流是一个类 2.了解输入输出流类库基本结构和主要类,掌握主要层次,其中重 点理解fstream,iostream和iomanip 3.理解流缓冲区类的派生关系以及设备缓冲、文件缓冲和流缓冲 4.熟悉格式化的输入和输出,记住主要的常用的操作符,以及各种 应用(对齐) 掌握文件的输入和输出,区别C语言中的文件写入、打开等操作,会对一个文件进行I/O操作 实验环境硬件平台:普通的PC机 软件平台:Windows 操作系统编程环境:VisualC++ 6.0 实验内容1.文件数据的读取。编制一程序来显示并保存[2,1000]内的所有素数。显示、保存素数的格式为:每行10个素数,每一个素数占7个字符,右对齐,最后一行不足10个素数时按一行输出 2.编写一个单向链表的类模板,分别实现增加、删除、查找和打印操作 算法描述及实验步骤1、这个题主要考察了文件中数据的读取,还包括数据格式化输入输出。首先定义一个ofstream类的对象output,在main函数中打开文件后,再分别编写判断素数、每行输出10个数以及使辖域为7的代码,最后关闭文件。 2 这个题是C++与数据结构的结合,实现单向链表内各种功能。首先定义一个类ListNode,然后利用前插入法初始化链表,编写类模板的成员函数,再分别进行增加、删除和查找的操作

调试过程及实验结果 总结1.一旦文件被打开,文件中的文本数据信息的读/写操作与控制台文件信息的输入/输出操作就完全一致 2.定义ifstream、ofstream、fstream流类对象时,应用对象名替代控制台文本信息输入/输出使用的输入流类对象(如cin)和输出流类对象(如cout)

Java多线程和输入输出流

班级:13科技2班学号:201324131225 姓名:许耿宁 Java多线程和输入输出流 一、实验目的: 1.熟悉利用Thread类建立多线程方法。 2.熟悉利用Thread接口建立多线程方法。 3.熟悉Java的文件读写机制,练习输入输出流的使用。 二、实验内容: 1.阅读下列程序,分析并上机检验其功能。 public class DelayRunnable implements Runnable{ private static int count=0; private int no; private int delay; public DelayRunnable(){ count++; no=count; } public void run(){ try{ for (int i=0;i<10;i++){ delay=(int)(Math.random()*5000); Thread.sleep(delay); System.out.println("Thread "+no+" with a delay "+delay); } }catch(InterruptedException e){} } } class MyRunnable{ public static void main(String args[]){ DelayRunnable r1 = new DelayRunnable();

DelayRunnable r2 = new DelayRunnable(); Thread thread1=new Thread(r1); Thread thread2=new Thread(r2); thread1.start(); thread2.start(); try{ Thread.sleep(1000); }catch(InterruptedException e){ System.out.println("Thread wrong"); } } } 2.将上列程序利用Runnable接口改写,并上机检验。 3.创建简单的程序ThreeThread.java,该程序将创建三个线程,每个线程应当显示它所运行的时间(可以考虑使用Date类或Calendar类)。 4.键盘输入10个整数,从小到大进行排序。 5.接收键盘输入的字符串,用FileInputStream类将字符串写入文件,用 FileOutputStream类读出文件内容显示在屏幕上。 6.将一个文本文件的内容按行读出,每读出一行就顺序加上行号,并写入到另一个文件中。 三、实验要求: 1.通过实验掌握Thread 、Runnable使用方法; 2.程序必须能够实现多线程; 3.程序必须能够完成题目要求; 4.通过实验掌握文件输入输出流的使用方法; 5.程序必须能够从键盘接收字符串并保存在文件中; 6.程序必须能够读出文件内容显示在屏幕上; 7.写出实验报告。 四、实验代码及截图: 第一题: 在编译器上运行程序得到截图所示结果:

实验04Java输入输出流报告材料

实验四 Java 输入输出流 1.实验目的 (1) 掌握输入输出流的总体结构; (2) 掌握流的概念; (3) 了解各种流(包括文件流、过滤流、对象的序列化、随机访问)的使用。2.实验内容 实验题1 编写一个Java Application程序,打印命令行输入的所有参数。 [基本要求] 编写完整程序。 运行结果: 代码如下: import java.util.Scanner; public class CommandOutPut { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("Please input :"); Scanner in = new Scanner(System.in);

String str = in.nextLine(); System.out.println("The output results :"); System.out.println(str); in.close(); } } 实验题2 通过键盘输入路径,搜索指定路径下的全部内容。 运行结果: 代码如下: package https://www.360docs.net/doc/9d14199899.html,.output; import java.io.File; import java.io.FileInputStream; import java.io.IOException; public class Output { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { // TODO Auto-generated method stub String fileName = "d:\\xxx.txt"; File file = new File(fileName); byte[] b=new byte[(int)file.length()]; FileInputStream out=new FileInputStream(file);

JAVA输入输出流--字节流篇(什么时候用哪个)

1流的概念 stream代表的是任何有能力产出数据的数据源,或是任何有能力接收数据的接收源。流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接。类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流。这时候你就可以想象数据好像在这其中“流”动一样,如下图: 在Java的IO中,所有的stream(包括Inputstream和Out stream)都包括两种类型: (1)字节流 表示以字节为单位从stream中读取或往stream中写入信息,即io包中的inputstream类和outputstream类的派生类。通常用来读取二进制数据,如图象和声音。 (2)字符流 以Unicode字符为导向的stream,表示以Unicode字符为单位从stream中读取或往stream中写入信息。 区别: Reader和Writer要解决的,最主要的问题就是国际化。原先的I/O类库只支持8位的字节流,因此不可能很好地处理16位的Unicode字符流。Unicode是国际化的字符集(更何况Java内置的char就是16位的Unicode 字符),这样加了Reader和Writer之后,所有的I/O就都支持Unicode了。此外新类库的性能也比旧的好。 但是,Read和Write并不是取代InputStream和OutputStream,有时,你还必须同时使用"基于byte的类"和"基于字符的类"。为此,它还提供了两个"适配器(adapter)"类。InputStreamReader负责将InputStream转化成Reader,而OutputStreamWriter则将OutputStream转化成Writer。实际上是通过byte[]和String来关联。在实际开发中出现的汉字问题实际上都是在字符流和字节流之间转化不统一而造成的。 以字符为导向的stream基本上对有与之相对应的以字节为导向的stream。两个对应类实现的功能相同,只是在操作时的导向不同。

输入与输出流和线程习题

输入与输出流 一、选择题 1.流的传递方式是(B) A. 并行的 B. 串行的 C. 并行和串行 D. 以上都不对 2.下列不是java的输入输出流的是(A) A. 文本流 B. 字节流 C. 字符流 D. 文件流 3.凡是从中央处理器流向外部设备的数据流称为(D) A. 文件流 B. 字符流 C. 输入流 D. 输出流 4.获取一个不包含路径的文件名的方法为(A) A. String getName( ) B. String getPath( ) C. String getAbslutePath( ) D. String getParent( ) 5.下列属于文件输入输出类的是(D) A. FileInputStream和FileOutputStream B. BufferInputStream和BufferOutputStream C. PipedInputStream和PipedOutputStream D. 以上都是 6.下列不属于FileInputStream输入流的read()成员函数的是(D) A. int read(); B. int read(byte b[]); C. int read(byte b[],int offset,int len); D. int read(int line); 7.当处理的数据量很多,或向文件些很多次小数据,一般使用(C)流 A. DataOutput B. FileOutput C. BufferedOutput D.PipedOutput 8.当把一个程序、线程或代码段的输出连接到另一个程序、线程或代码短的输入时,应使用(D)流 A. DataOutput B. FileOutput C. BufferedOutput D. PipedOutput 9.当要将一文本文件当作一个数据库访问,读完一个纪录后,跳到另一个纪录,它们在文

C++输入输出流实验报告

深圳大学实验报告 实验课程名称:程序设计实验与课程设计 实验项目名称:实验10 C++流输入与流输出 学院:计软专业:计科 报告人:学号:班级: 3 同组人:无 指导教师:朱安民 实验时间:2014年6月16日提交时间:2014年6月16 声明: 本次实验内容由报告人和同组人独立完成,所有涉及到他人的工作均已说明。报告人和同组人均同意教师及学校为教学活动而引用本实验的内容,且无需事先征得同意和特别说明。 教务处制

一、实验目的 1.掌握标准输入输出(iostream库中标准对象cin、cout)的使用 2.掌握IO流类成员函数输入输出(cin.get, cin.getline, cin.read; cout.put, cout.write)的使用 3.掌握输出格式(标准控制符、IO流类成员函数、iomanip头文件中的控制符)控制方法 4.掌握磁盘文件的输入输出方法 二、实验说明和实验环境 1.在奥特曼类的基础上,编写一个程序,重载运算符“》”和“《”,使得用户可以直接(格式化)输出奥特曼的状态。在主程序中输入若干个(3个)奥特曼的状态,并分别将它们保存到文件RecordU.txt中。然后读取并显示文件中的内容。 2.奥特曼和怪物都具有属性:等级, 生命, 攻击, 经验, 金钱,都具有方法:初始化initial和显示状态display 在奥特曼的初始化中,需要接受外来等级参数,生命, 攻击的数值初始化为等级的10倍,金钱为等级的100倍,经验恒为0 在怪兽的初始化中,需要接受外来等级参数,生命, 攻击的数值初始化为等级的8倍,经验为等级的80倍,金钱为等级的800倍 对怪兽和奥特曼的状态输出采用运算符《重载的方法,并结合display方法使用,注意本题目要求怪兽和奥特曼的状态输出必须使用重载运算符《,不能直接使用display方法。 注意:为了实现运算符《重载,需要包含头文件 经常天降怪石会砸中奥特曼或怪兽,如果被幸运石砸中,就会处于“鸿运当头”状态,被砸对象除等级外其它属性全部翻倍;如果被厄运石砸中,就会陷入“倒霉透顶”状态,被砸对象除等级外其它属性全部减半。把“鸿运当头”封装成操作,并用重载运算符++来实现;“倒霉透顶”封装成操作,并用重载运算符--来实现。两个重载都需要用友元方法。 3.奥特曼和怪物经过一番战斗斗,需要中场休息,休息时把各自的属性值存放到一个文件中,休息结束时需要从文件中读取之前的状态继续战斗。 奥特曼和怪物都具有属性:等级, 生命, 攻击, 经验, 金钱,都具有方法:初始化initial和显示状态display 奥特曼和怪兽的属性值均来自于文件(文件的第一行是奥特曼的数据,初始状态为:等级是8,生命, 攻击的数值初始化为等级的10倍,金钱为等级的100倍,经验恒为0,文件的第二行是怪兽的数据,初始状态为等级是4,生命, 攻击的数值初始化为等级的8倍,经验为等级的80倍,金钱为等级的800倍)对怪兽和奥特曼的状态输出采用运算符《重载的方法,并结合display方法使用,注意本题目要求怪兽和奥特曼的状态输出必须使用重载运算符《,不能直接使用display方法。 把信息直接从文件读出来并赋值给奥特曼和怪兽,需要重载》运算符作为友元; 把奥特曼和怪兽的值写入文件,要求重载《运算符作为友元

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: ");

文件流是以外存文件为输入输出对象的数据流

文件流是以外存文件为输入输出对象的数据流,字符串流不是以外存文件为输入输出的对象,而以内存中用户定义的字符数组(字符串)为输入输出的对象,即将数据输出到内存中的字符数组,或者从字符数组(字符串)将数据读入。字符串流也称为内存流。 字符串流也有相应的缓冲区,开始时流缓冲区是空的。如果向字符数组存入数据,随着向流插入数据,流缓冲区中的数据不断增加,待缓冲区满了(或遇换行符),一起存入字符数组。如果是从字符数组读数据,先将字符数组中的数据送到流缓冲区,然后从缓冲区中提取数据赋给有关变量。 在字符数组中可以存放字符,也可以存放整数、浮点数以及其他类型的数据。在向字符数组存入数据之前,要先将数据从二进制形式转换为ASCII代码,然后存放在缓冲区,再从缓冲区送到字符数组。从字符数组读数据时,先将字符数组中的数据送到缓冲区,在赋给变量前要先将ASCII代码转换为二进制形式。总之,流缓冲区中的数据格式与字符数组相同。这种情况与以标准设备(键盘和显示器)为对象的输入输出是类似的,键盘和显示器都是按字符形式输入输出的设备,内存中的数据在输出到显示器之前,先要转换为ASCII码形式,并送到输出缓冲区中。从键盘输入的数据以ASCII码形式输入到输入缓冲区,在赋给变量前转换为相应变量类型的二进制形式,然后赋给变量。对于字符串流的输入输出的情况,如不清楚,可以从对标准设备的输入输出中得到启发。 文件流类有ifstream,ofstream和fstream,而字符串流类有istrstream,ostrstream和strstream。文件流类和字符串流类都是ostream,istream和iostream类的派生类,因此对它们的操作方法是基本相同的。向内存中的一个字符数组写数据就如同向文件写数据一样,但有3点不同: 1. 输出时数据不是流向外存文件,而是流向内存中的一个存储空间。输入时从内存中的存储空间读取数据。在严格的意义上 说,这不属于输入输出,称为读写比较合适。因为输入输出一般指的是在计算机内存与计算机外的文件(外部设备也视为文件)之间的数据传送。但由于C++的字符串流采用了C++的流输入输出机制,因此往往也用输入和输出来表述读写操作。 2. 字符串流对象关联的不是文件,而是内存中的一个字符数组,因此不需要打开和关闭文件。 3. 每个文件的最后都有一个文件结束符,表示文件的结束。而字符串流所关联的字符数组中没有相应的结束标志,用户要指定 一个特殊字符作为结束符,在向字符数组写入全部数据后要写入此字符。 字符串流类没有open成员函数,因此要在建立字符串流对象时通过给定参数来确立字符串流与字符数组的关联。即通过调用构造函数来解决此问题。建立字符串流对象的方法与含义如下。 建立输出字符串流对象 ostrstream类提供的构造函数的原型为: ostrstream::ostrstream(char *buffer,int n,int mode=ios::out); buffer是指向字符数组首元素的指针,n为指定的流缓冲区的大小(一般选与字符数组的大小相同,也可以不同),第3个参数是可选的,默认为ios::out方式。可以用以下语句建立输出字符串流对象并与字符数组建立关联: ostrstream strout(ch1,20); 作用是建立输出字符串流对象strout,并使strout与字符数组ch1关联(通过字符串流将数据输出到字符数组ch1),流缓冲区大小为20。 建立输入字符串流对象 istrstream类提供了两个带参的构造函数,原型为: istrstream::istrstream(char *buffer); istrstream::istrstream(char *buffer,int n); buffer是指向字符数组首元素的指针,用它来初始化流对象(使流对象与字符数组建立关联)。可以用以下语句建立输入字符串流对象: istrstream strin(ch2); 作用是建立输入字符串流对象strin,将字符数组ch2中的全部数据作为输入字符串流的内容。 istrstream strin(ch2,20); 流缓冲区大小为20,因此只将字符数组ch2中的,20个字符作为输入字符串流的内容。 建立输入输出字符串流对象 strstream类提供的构造函数的原型为: strstream::strstream(char *buffer,int n,int mode); 可以用以下语句建立输入输出字符串流对象:

实验七输入输出流

实验七输入输出流 一、实验目的 (1)了解流式输入输出的基本概念; (2)熟悉Java.io包中常用的基本输入输出类; (3)掌握程序与文件之间的基本输入输出操作; 二、实验内容 1) 把字符串“20102324,张三,男,25,软件工程”,保存到文件”d:\\a.txt”中, 并读取打印a.txt文件中的内容。 2) 把我们在聊天界面中发送的消息保存到日志文件里面,在界面上添加一个历史按钮,当点击历史按钮时读取日志文件内容。 三、实验步骤 1)把字符串“20102324,张三,男,25,软件工程”,保存到文件”d:\\a.txt”中,并读取打印a.txt文件中的内容。 (1) 定义变量message,值为“20102324,张三,男,25,软件工程”; (2) 创建指向”D:\\a.txt”的文件对象 (3) 创建输出流 (4) 把message写入流(文件)中 (5) 关闭输出流 (6) 创建输入流 (7) 读取文件内容 (8) 打印文件内容 (9) 关闭输入流 import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class FileIO { public static void main(String[] args) { String message = "20102324,张三,男,25,软件工程"; File myFile=new File("D:\\a.txt"); //写文件 try { FileOutputStream fout = new FileOutputStream(myFile,true);//不覆盖 try { fout.write(message.getBytes()); } catch (IOException e) { e.printStackTrace(); }finally{ try { fout.close(); } catch (IOException e) { e.printStackTrace();}} } catch (FileNotFoundException e) { e.printStackTrace(); } //读文件 try { FileInputStream fint = new FileInputStream(myFile); byte b[] = new byte[(int) myFile.length()]; try { fint.read(b); String s = new String(b); System.out.println(s); } catch (IOException e) {

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); }

实验五 输入输出流

实验五输入输出流 一、实验目的 1.掌握文件的使用 2.掌握字节I/O流、字符类I/O流、缓冲流、数据流等常用流的使用。 3.熟悉对象流、RandomAccessFile类的使用。 二、实验内容 1.利用各种常用IO流的处理方法,编写Java应用程序。 三、实验步骤与要求 第1题文件加密 编写一个Java应用程序,将已存在的扩展名为.txt的文本文件加密后存入另一个文本文件中。 package four; import java.io.*; public class file { public static void main(String args[]) { File readFile =new File("Student.txt"), writeFile =new File("Hello.txt"); String s="欢迎来到北京 welcome"; char b[]=s.toCharArray(); try{ FileWriter out=new FileWriter(readFile,true); out.write(b); out.close(); FileWriter tofile=new FileWriter ("hello.txt"); for(int i=0;i

tofile.write(secret); tofile.close(); FileReader inOne=new FileReader("Hello.txt"); int t=0; System.out.println("存入后:"); while((t=inOne.read(b,0,2))!=-1) { String str=new String(b,0,2); System.out.println(str); } inOne.close(); } catch (IOException e){ System.out.println(e); } } } 第2题读写基本类型数据 编写一个Java应用程序,将若干基本数据写入到一个文件,然后再按顺序读出。

第9章输入输出流与文件操作

什么是流?流有什么用?面向对象语言为什么需要流?哪些场合需要流? 答:流是指一组有顺序、有起点和终点地字节集合,是对数据传输地总称或抽象(也就是数据在两个对象之间地传输称为流).个人收集整理勿做商业用途 流地作用就是使数据传输操作独立于相关设备. 在面向对象地程序设计中,数据地传输和流动具有广泛性,可以在内存与外部设备之间传输,还可以从内存到内存,甚至可以从一台计算机通过网络流向另一台计算机等,故面向对象语言采用流机制.个人收集整理勿做商业用途 在标准输入输出、在文件地读写等操作中都需要流. 提供了哪些流类?各种流类之间地关系是怎样地?什么场合需要使用什么流类? 答:中按照流地方向性,流分为输入流和输出流两大类.按照流中元素地基本类型,流分为字节流和字符流两大类.字节流类按照流地方向分为字节输入流类和字节输出流类,字符流类方向性分为字符输入流类和字符输出流类.以及文件操作类,随机存取文件类.个人收集整理勿做商业用途 其中类是所有字节输入流地根类,类是所有字节输出流地根类;类是所有字符输入流地根类,类是所有字符输出流地根类.个人收集整理勿做商业用途 操作系统中文件和目录概念是怎么样地?提供了哪些对文件和目录操作地类?程序中对文件和目录能够进行哪些操作?如何操作?个人收集整理勿做商业用途 答:文件是信息地一种组织形式,是存储在外部存储介质上地具有标识名地一组相关地信息集合.目录是文件系统组织和管理文件地基本单位,保存它所管理地每个文件地基本属性信息(称为文件目录项或文件控制块).个人收集整理勿做商业用途 直接对文件地顺序存取和随机存取操作,提供了类记载文件属性信息,对文件读写操作时以流地形式.类以随机存取方式进行文件读写操作.但在对文件操作过程中还需要使用文件过滤器接口和文件对话框类.在操作系统中,目录也是以文件地形式保存地,称为目录文件.故一个对象也可以表示一个目录.个人收集整理勿做商业用途 可以对文件进行读、写、删除、创建等操作,对目录可以读取、创建、删除等操作.应用程序通过调用操作系统提供地系统调用能够对文件及目录进行各种操作.个人收集整理勿做商业用途 再打开、保存、复制文件时,需要读写文件中地数据内容,这些操作由流实现,不同类型地文件需要使用不同地流泪.个人收集整理勿做商业用途 流与文件操作有什么关系?实际应用中将流类与文件操作结合起来能够实现哪些复杂问题?如何实现?个人收集整理勿做商业用途 答:对文件地操作时通过流这个工具进行地.再打开、保存、复制文件时,需要读写文件中地数据内容,这些操作由流实现,不同类型地文件需要使用不同地流泪.个人收集整理勿做商业用途 什么是输入输出?什么是标准输入输出?怎样实现标准输入输出功能? 答:数据由外部设备流向内存,这个过程称为输入;数据有内存流向外部设备,这个过程称为输出. 在计算机系统中,标准输入是从键盘等外部输入设备中获得数据,标准输出是向显示器或打印机等外部输出设备发送数据.个人收集整理勿做商业用途 在类中声明了个常量、和用于实现标准输入输出功能.个人收集整理勿做商业用途除了标准输入输出及文件操作之外,还有那些应用中需要使用流? 答:在面向对象地程序设计中,数据地传输和流动具有广泛性,不仅可以在内存与外部设备之间传输,还可以从内存流向内存,甚至可以从一台计算机通过网络流向另一台计算机,因此各种不同地数据源地传输都需要采取不同地流机制来实现.个人收集整理勿做商业用途

(完整版)5Java第五单元练习题-输入流与输出流

5 Java 输入流与输出流 5.1 单项选择题 1.实现字符流的写操作类是( A . FileReader B . Writer C )。 . FileInputStream D . FileOutputStream 2. 实现字符流的读操作类是( )。 A . FileReader B . Writer C . FileInputStream D . FileOutputStream 3.凡是从中央处理器流向外部设备的数据流称为() A. 文件流 B. 字符流 C. 输入流 D. 输出流 4.构造 BufferedInputStream 的合适参数是哪一个?( ) A . FileInputStream B . BufferedOutputStream C . File D . FileOuterStream 5.在编写 Java Application 程序时,若需要使用到标准输入输出语句,必须在程序的开 头写上( )语句。 D . import java.awt.Graphics ; 6.下列流中哪个不属于字符流?( A . InputStreamReader C . FilterReader 7.流的传递方式是() A. 并行的 B. 串行的 C. 并行和串行 D. 以上都不对 8.字符流与字节流的区别在于( ) A. 前者带有缓冲,后者没有 B. 前者是块读写,后者是字节读写 C. 二者没有区别,可以互换使用 A . import java.awt.* ; B import java.applet.Applet ; C . import java.io.* ; ) B . BufferedReade r D . FileInputStream

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 输入输出流实验

实验1 学读英文单词 1. 相关知识点 当程序需要读取磁盘上的数据或将程序中得到数据存储到磁盘时,就可以使用输入/输出流,简称I/O流。I/O流提供一条通道,用户可以通过该通道读取“源”中的数据或把数据传送到目的地。I/O流中的输入流的指向称作源,程序通过指向源的输入流读取源中的数据;输出流的指向称作目的地,程序通过指向目的地的输出流写入数据并把信息传递到目的地。 FileReader类是Reader的子类,该类创建的对象称为文件字符输入流。文件字符输入流按字符读取文件中的数据。FileReader流按顺序读取文件,只要不关闭流,每次调用读取方法时FileReader流就会依次读取文件中其余的内容,直到文件的末尾或流被关闭。 FileWriter类是Writer的子类,该类创建的对象称为文件字符输出流。文件字符输出流按字符将数据写入到文件中。FileWriter流按顺序写入数据,只要不关闭流,每次调用写入方法时FileWriter流就会依次向文件写入内容,直到流被关闭。 FileInputStream是InputStream的子类,该类创建的对象称为文件字节输入流。文件字节输入流按字节读取文件中的数据。FileInputStream流按顺序读取文件,只要不关闭流,每次调用读取方法时就依次读取文件中其余的内容,直到文件的末尾或流被关闭。 FileOutputStream类是OutputStream的子类,该类创建的对象称为文件字节输出流。文件字节输出流按字节将数据写入到文件中。FileOutputStream流按顺序写入数据,只要不关闭流,每次调用写入方法FileOutputStream流就会依次向文件写入内容,直到流被关闭。 BufferedReader类创建的对象称为缓冲输入流,该输入流的指向必须是一个Reader流,称作BufferedReader流的底层流,底层流负责将数据读入缓冲区,BufferedReader流的源就是这个缓冲区,缓冲输入流再从缓冲区中读取数据。 BufferedWriter类创建的对象称为缓冲输出流,缓冲输出流可以将BufferedWriter流和FileWriter流连接在一起,然后使用BufferedWriter流将数据写入缓冲区,FileWriter流作为BufferedWriter的底层流,负责将数据写入最终目的地。 2. 实验目的 掌握字符输入流和输出流的用法。 3. 实验要求 编写一个Java应用程序,其要求如下: (1)程序可以将一个由英文单词组成的文本文件读入到程序中。 (2)单击“下一个单词”按钮可以在一个标签中显示程序读入的一个单词。 (3)单击“发音”按钮可以听到标签上显示的单词的读音。 (4)用户可以使用文本编辑器编辑程序中用到的三个由英文单词组成的文本文件:training1.txt、training2.txt和training3.txt,这些文本文件中的单词需要用空格、逗号或回车符分隔。 (5)需要制作相应的声音文件,比如,training1.txt文件包含单词hello,那么在当前应用程序的运行目录中需要有hello.wav格式的声音文件。 4. 程序效果示例 5. 程序模板 按模板要求,将【代码1】~【代码5】替换为Java程序代码。 模板1:StudyMainClass.java

相关文档
最新文档