掌握:java的输入输出处理
1.编写应用程序,使用System.in.read()方法读取用户从键盘输入的字节数据,回车后,把从键盘输入的数据存放到数组buffer中,并将用户输入的数据通过System.out.print()显示在屏幕上。
import java.io.*;
public class Class1
{
public static void main(String args[]) {
byte buffer[]=new byte[128];
int n;
try
{
n=System.in.read(buffer); //把键盘输入的数据读到数组buffer中,返回实际读取的字节数
for(int i=0;i<n;i++)
System.out.print((char)buffer[i]);
}
catch(IOException e)
{ System.out.print(e); }
}
}
2.编写应用程序,使用System.in.read()方法读取用户从键盘输入的字节数据,回车后,把从键盘输入的数据存放到数组buffer中,并将用户输入的数据保存为指定路径下的文件。
import java.io.*;
public class Class1
{
public static void main(String args[]) {
byte buffer[]=new byte[128];
int n;
try
{
n=System.in.read(buffer);
FileOutputStream out=new FileOutputStream("./abc.txt",true);//追加
//FileOutputStream out=new FileOutputStream("./abc.txt",false);
out.write(buffer,0,n);
out.close( );
}
catch(IOException e)
{ System.out.print(e); }
}
}
3. 编写java应用程序,使用FileInputStream类对象读取程序本身(或其他目录下的文件)并显示在屏幕上。
import java.io.*;
public class Class1
{
public static void main (String[] args)
{
try
{
//FileInputStream fis=new FileInputStream("c:\\windows\\Config.txt");
FileInputStream fis=new FileInputStream("Class1.java");
int n;
while((n=fis.read())!=-1)
System.out.print((char)n);
fis.close();
}
catch(IOException e)
{
System.out.println(e.toString());
}
}
}
4. 编写java应用程序,使用FileInputStream类对象读取程序本身(或其他目录下的文件)到字节数组中,并显示在屏幕上(或存储为其他文件)。
import java.io.*;//读取程序本身,显示在屏幕上
public class Class1
{
public static void main (String[] args)
{
try
{
FileInputStream fis=new FileInputStream("Class1.java");
byte[] b=new byte[fis.available()];
System.out.println("文件流的大小:"+fis.available());
int n=fis.read(b);
myprint(b);
System.out.print("实际读取的字节数:"+n);
fis.close();
}
catch(IOException e)
{
System.out.println(e.toString());
}
}
static void myprint(byte[] x)
{
for(int i=0;i<x.length;i++)
System.out.print((char)x[i]);
}
}
5.编写应用程序,程序中创建一个文件输入流对象fis,读取当前目录下文本文件test1.txt,该文件内容有如下两行文本:
Java program is easy.
I like it.
从文件输入流fis中读取5个字节数据存放到数组b中,字节数据存放的位置从数组下标3开始。将读取的数据在屏幕输出。
import java.io.*;
public class Class1
{
public static void main( String[ ] args ) throws IOException
{
File file = new File("./test1.txt");
FileInputStream fis = new FileInputStream( file);
int n=0;
byte b[]=new byte[8];
n=fis.read(b,3,5);
fis.close();
for(int i=3;i<b.length;i++)//字节数组中从下标3开始的数据转化为字符后输出。
System.out.print((char)b[i]+"\t");
}
}
6.编写应用程序,程序中创建一个文件输出流对象out向当前目录下已有的文件abc.txt(内容为:"ABCDEFG")写入字符串"abcdefg"中的所有字符和大写字母'A'。
import java.io.*;
public class Class1
{
public static void main (String[] x) throws IOException
{
String s="abcdefg";
byte[] b;
FileOutputStream out=new FileOutputStream("./abc.txt",true);//添加字节数据
b=s.getBytes();
out.write(b,0,b.length);
out.write(65);//写入字节数据65---‘A’
out.close();
}
}
7.编写两个线程子类,分别用来创建管道输出流和管道输入流,其中管道输出流向管道发送5个0~20之间的随机整数;管道输入流接收管道中传过来的5个随机整数,并求他们的和。编写Java应用程序测试管道流的数据传送。
//TestPipedStream.java
import java.io.*;
public class TestPipedStream {
public static void main( String[] args ) {
try {//创建没有连接的管道输出流和管道输入流
PipedOutputStream out = new PipedOutputStream( );
PipedInputStream in = new PipedInputStream( );
out.connect( in );//连接两个管道流
ThreadOut to = new ThreadOut( out );
ThreadIn ti = new ThreadIn( in );
to.start( );//启动线程
ti.start( );
}
catch( IOException e ) {
System.out.println( e );
}
}
}
/*向管道输出数据的线程子类:发送0~20之间的5个随机整数*/
class ThreadOut extends Thread {
private int[] data1=new int[5]; //管道输出流要发送的数据
private DataOutputStream dos;//声明数据输出流对象dos
public ThreadOut( PipedOutputStream out) {
//将数据输出流和管道输出流连接,以便向管道发送int类型的数据
dos = new DataOutputStream(out);
}
public void run( ) {//重写线程类的方法,线程启动后将执行该方法
try {//向管道中写入数据
for(int i=0;i<data1.length;i++) {
data1[i]=(int)(Math.random()*20);
System.out.println("第"+(i+1)+"次发送数据:"+data1[i]);
dos.writeInt(data1[i]);//向管道输出流写入数据
try {sleep(1000);} //线程休眠1000毫秒
catch(InterruptedException e) { }
}
dos.close( );//关闭流
}
catch( IOException e ) {
System.out.println( e );
}
}
}
/*从管道中读取数据的线程子类:接收管道中传过来的5个随机整数*/
class ThreadIn extends Thread {
private int sum=0; //5个随机整数
private DataInputStream dis;//声明数据输入流对象dis
public ThreadIn( PipedInputStream in ) {
//将数据输入流和管道输入流连接,以便从管道读取int类型的数据
dis = new DataInputStream( in );
}
public void run( ) {//重写线程类的方法,线程启动后将执行该方法
try {//接收输出管道发送的数据:
int x;
for(int i=0;i<5;i++) {
x=dis.readInt();
sum+=x;
System.out.println("第"+(i+1)+"次接收数据:"
+x+"\t接收数据的和:"+sum);
try {sleep(1000);}
catch(InterruptedException e) { }
}
dis.close( );//关闭流
}
catch( IOException e ) {
System.out.println( e );
}
}
}
8.使用RandomAccessFile类及其方法。
import java.io.*;
public class Class1
{
public static void main( String[ ] args )
{
try
{
//以随机方式写入数据
RandomAccessFile out = new RandomAccessFile( "1.dat" , "rw" );
out.writeInt(12345);//4
out.writeChar('A');//2
out.writeBoolean(true);//1
out.writeUTF("程序设计");//8
//显示字符‘A' 和”程序设计“
out.seek(4);
System.out.println(out.readChar());
out.skipBytes(1);//out.seek(7);
System.out.println(out.readUTF());
System.out.println(out.getFilePointer());
System.out.println(out.length());
out.close();
System.in.read();
}
catch( IOException e )
{
System.out.println( e );
System.exit( -2 );
}
}
}
9.编写应用程序,使用RandomAccessFile类及其方法,把程序本身分两次显示在屏幕上。第一次直接显示,第二次给每一行添加的行号显示。
import java.io.*;
public class Test
{
public static void main( String[ ] args ) throws IOException
{
RandomAccessFile randomfile = new RandomAccessFile("Test.java" , "r" );
String s;
while((s=randomfile.readLine())!=null)
{ System.out.println(s); }
long filePointer=0,fileLength=randomfile.length();
randomfile.seek(0); //文件指针已到文件尾,将文件指针重设到文件开始位置
int i=1;
while(filePointer<fileLength)
{
s=randomfile.readLine();
System.out.println((i++)+" "+s);
filePointer=randomfile.getFilePointer();
}
randomfile.close();
}
}
10.在程序所在的目录下有子目录b,目录b下有文本文件testb.txt。编写应用程序,创建文件对象:
File file=new File("b/testb.txt");
通过文件对象file得到它的文件名、相对路径、绝对路径、父目录名。
import java.io.*;
public class Class1
{
public static void main( String args[ ] )
{
File file=new File("b/testb.txt");
System.out.println("文件名:" + file.getName( ) );
System.out.println("相对路径:" + file.getPath( ) );
System.out.println("绝对路径:" + file.getAbsolutePath( ) );
System.out.println("父目录名:" + file.getParent( ) );
}
}
11.请编写一个名为Class1.java的Application,其功能为:测验文件Class1.java是否存在并输出其长度。
import java.io.*;
public class Class1
{
public static void main (String[] args)
{
File f1=new File("./Class1.java");
System.out.println("is exist:"+f1.exists( ));
System.out.println("file length:"+f1.length( ));
}
}
12.编写应用程序:创建目录c:\temp,并创建一个文件2.txt,向该文件中写入字符串"The first snow came."共5次。
import java.io.*;
public class Class1
{
public static void main(String args[]) throws IOException
{
File file1=new File("c:\\temp");
file1.mkdir();
File file2=new File(file1,"2.txt");
FileOutputStream out1=new FileOutputStream(file2);
String s="The first snow came.";
byte[] b=s.getBytes();
for(int i=0;i<5;i++)
{
out1.write(b,0,b.length);
}
}
}
13.过滤文件并显示。
import java.io.*;
public class Class1
{
public static void main( String[ ] args )
{
try
{
File oDir = new File( "." );
String[ ] strList;
//如果没有命令行参数就取当前目录下的所有文件列表
if( 0 == args.length )
strList = oDir.list( );
else
strList = oDir.list( new DirFilter(args[0]));
for( int i = 0; i < strList.length; i ++ )
System.out.println( strList[ i ] );
}
catch( Exception e )
{
System.out.println( e );
}
}
}
class DirFilter implements FilenameFilter
{
String strPick;
DirFilter( String pickname )
{
this.strPick = pickname;
}
public boolean accept( File dir, String name )
{
return name.endsWith( strPick );
}
}
14.编写java应用程序,使用FileReader类对象读取程序本身(或其他目录下的文件)并显示在屏幕上。
import java.io.*;//读取程序本身,显示在屏幕上
public class Class1
{
public static void main (String[] args)
{
try
{
FileReader fis=new FileReader("Class1.java");
//FileReader fis=new FileReader("c:\\windows\\Config.txt");
int n;
while((n=fis.read())!=-1)
System.out.print((char)n);
fis.close();
}
catch(IOException e)
{
System.out.println(e.toString());
}
}
}
15.编写应用程序,创建BufferedReader的对象,从某个文本文件中的字符输入数据流中读取一行字符(该文件与程序在同一目录下),跳过10个字节后将其显示出来。
import java.io.*;
public class Class1
{
public static void main(String args[]) throws IOException
{
BufferedReader b_reader=new BufferedReader(new FileReader("1.js"));
String str;
b_reader.skip(10);
str=b_reader.readLine();
System.out.println(str);