java第九章输入输出文件练习
- 格式:doc
- 大小:36.00 KB
- 文档页数:3
第九章 Java输入输出操作9.1 Java 输入输出流所有的程序语言都提及与本机文件系统交互的方式;Java也不例外。
我们将看看Java 是怎样处理标准文件输入输出的(包括stdin,stout,stderr)。
当你在网络上开发小程序时,你必须注意直接文件输入输出是不安全因素的关键。
大多数用户设置他们的浏览器,可让你自由的访问他们的文件系统,但有的不让你访问。
当然,如果你开发你内部的应用程序,你也许需要直接访问文件。
标准输入输出Unix的用户,或其他基于命令行系统的用户(如DOS),都知道标准输入输出的含义。
标准输入文件是键盘,标准输出文件是你的终端屏幕。
标准错误输出文件也指向屏幕,如果有必要,它也可以指向另一个文件以便和正常输出区分。
系统类Java通过系统类达到访问标准输入输出的功能。
上面提到的三个文件在这个系统类中实现:Stdin System.in作为InputStream类的一个实例来实现stdin,你可以使用read()和skip(long n)两个成员函数。
read()让你从输入中读一个字节,skip(long n)让你在输入中跳过n个字节。
Stout System.out作为PrintStream来实现stdout,你可以使用print()和println()两个成员函数。
这两个函数支持Java的任意基本类型作为参数。
Stderr System.err同stdout一样实现stderr。
象System.out一样,你可以访问PrintStream 成员函数。
9.2 标准输入输出例子import java.io.* class myCat{public void main(String args[]) throws IOException{int b;int count = 0;while ((b = System.in.read()) != -1){count++;System.out.print((char)b);}System.out.println(); //blank line System.err.println("counted"+count+"total bytes.");}}9.3 普通输入输出类除了基本的键盘输入和屏幕输出外,我们还需要联系文件的输入输出。
第9章习题解答1.与输入/输出有关的流类有哪些?答:与输入/输出有关的流类主要有InputStream、OutputStream和Reader、Writer类及其子类。
除此以外,与流有关的类还有File类、FileDescriptor类、StreamTokenizer类和RandomAccessFile类。
2.字节流与字符流之间有哪些区别?答:字节流是面向字节的流,流中的数据以8位字节为单位进行读写,是抽象类InputStream和OutputStream的子类,通常用于读写二进制数据,如图像和声音。
字符流是面向字符的流,流中的数据以16位字符(Unicode字符)为单位进行读写,是抽象类Reader和Writer的子类,通常用于字符数据的处理。
3.什么是节点流?什么是处理流或过滤流?分别在什么场合使用?答:一个流有两个端点。
一个端点是程序;另一个端点可以是特定的外部设备(如键盘、显示器、已连接的网络等)和磁盘文件,甚至是一块内存区域(统称为节点),也可以是一个已存在流的目的端。
流的一端是程序,另一端是节点的流,称为节点流。
节点流是一种最基本的流。
以其它已经存在的流作为一个端点的流,称为处理流。
处理流又称过滤流,是对已存在的节点流或其它处理流的进一步处理。
对节点流中的数据只能按字节或字符读写。
当读写的数据不是单个字节或字符,而是一个数据块或字符串等时,就要使用处理流或过滤流。
4.标准流对象有哪些?它们是哪个类的对象?答:标准流对象有3个,它们是:System.in、System.out和System.err。
System.in 是InputStream类对象,System.out和System.err是PrintStream类对象。
5.顺序读写与随机读写的特点分别是什么?答:所谓顺序读写是指在读写流中的数据时只能按顺序进行。
换言之,在读取流中的第n个字节或字符时,必须已经读取了流中的前n-1个字节或字符;同样,在写入了流中n-1个字节或字符后,才能写入第n个字节或字符。
1.在Java中,下列哪个类可以用于读取文本文件的字符?o A. FileInputStreamo B. FileReadero C. BufferedReadero D. InputStreamReader答案: B解析: FileReader是Java中用于读取文本文件字符的类,它建立于文件的基础上。
2.C语言中,使用fscanf函数从文件读取数据,其返回值表示什么?o A. 成功读取的字符数o B. 文件中的总字符数o C. 成功读取的数据项的数量o D. 文件的大小答案: C解析: fscanf函数返回成功读取和转换的数据项的数量。
3.下列哪个类用于在Java中创建输出文件流?o A. FileWritero B. FileOutputStreamo C. BufferedWritero D. OutputStreamWriter答案: B解析: FileOutputStream用于在Java中创建输出文件流。
4.假设你在C语言中使用fopen函数打开一个文件,但文件不存在于指定路径,函数将返回什么?o A. 正常文件指针o B. NULLo C. 错误代码o D. 空字符串答案: B解析: 如果文件不存在或无法打开,fopen将返回NULL。
5.在Java中,FileInputStream和FileOutputStream类是用于处理哪种类型的文件的?o A. 二进制文件o B. 字符文件o C. 文本文件o D. 图像文件答案: A解析: FileInputStream和FileOutputStream是用于读写二进制文件的。
6.C语言中的fwrite函数用于将数据写入文件。
假设你有一个结构体,你如何保证其完全写入文件?o A. 使用fwrite函数并指定结构体的大小o B. 使用fprintf函数o C. 使用fputc函数o D. 使用fputs函数答案: A解析: fwrite函数可以用于写入任意类型的数据,通过指定数据的大小确保结构体完全写入。
第九章2.一个文本,一个按钮。
在文本区中输入数据,点击按钮,将文本内容输出到文件。
文件通过文件保存对话框制定。
程序运行结果:保存文件的源文件: SaveFile.javaimport java.awt.*;import java.awt.event.*;import javax.swing.*;import java.io.*;/***9.2一个文本,一个按钮。
<BR>*在文本区中输入数据,点击按钮,将文本内容输出到文件。
<BR>*文件通过文件保存对话框制定。
<BR>*@author黎明你好*/public class SaveFile extends JFrame implements ActionListener{private static final long serialVersionUID = 1L;// 序列化时为了保持版本的兼容性private JFileChooser fileChooser;// 文件选择对话框private JPanel northPanel;// 布局用的private JButton saveFileButton;// 保存按钮private JLabel label;// 用来显示文件的绝对路径private JTextArea textArea;// 文本框public SaveFile(){super("第九章,第二题- 保存文件");label = new JLabel(" ");fileChooser = new JFileChooser();northPanel = new JPanel();saveFileButton = new JButton("保存到文件");textArea = new JTextArea();textArea.setLineWrap(true);saveFileButton.addActionListener(this);northPanel.add(saveFileButton);this.add(northPanel, BorderLayout.NORTH);this.add(new JScrollPane(textArea), BorderLayout.CENTER);this.add(label, BorderLayout.SOUTH);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setBounds(50, 50, 500, 500);this.setVisible(true);this.validate();}public void actionPerformed(ActionEvent e) // 监听器方法{if (e.getSource() == saveFileButton){int message = fileChooser.showSaveDialog(this);if (message == JFileChooser.APPROVE_OPTION){File file = fileChooser.getSelectedFile();label.setText("保存到:" + file.getAbsolutePath());// 在label上显示这个文件的绝对路径this.setTitle(file.getName());// 设置JFrame的title为文件的名字saveFile(file);}else{label.setText("没有文件被选中");}}}/***把文本区上的内容保存到指定文件上*@param f-保存到的文件对象*/public void saveFile(File f){try{FileWriter file = new FileWriter(f);BufferedWriter out = new BufferedWriter(file);out.write(textArea.getText(), 0, textArea.getText().length());out.close();}catch( Exception e ){label.setText("写文件发生错误");}}public static void main(String[] args){new SaveFile();}}3.在一个文件中,每行存的是整数,各行整数个数不等,要求读这个文件,然后计算每行整数的和,并存到另一个文件中。
Java输入输出练习题及答案//******************************************************************** /*李白:春思燕草如碧丝,秦桑低绿枝。
当君怀归日,是妾断肠时。
春风不相识,何事入罗帏?*/public class l1 {public static void main(String[] args) {System.out.print(" 李白:春思\n\n");System.out.println("燕草如碧丝,秦桑低绿枝");System.out.println("当君怀归日,是妾断肠时");System.out.println("春风不相识,何事入罗帏");System.out.print("\n\n");}}//******************************************************************** /*********************/public class l2 {public static void main(String[] args) {System.out.println(" *");System.out.println(" *****");System.out.println(" *******");System.out.println(" *****");System.out.println(" *");System.out.print("\n\n");}}//******************************************************************** /*日一二三四五六1 2 3 45 6 7 8 9 10 1112 13 14 15 16 17 18*/public class l3 {public static void main(String[] args) {System.out.print("\t日\t一\t二\t三\t四\t五\t六\n\t\t\t\t1\t2\t3\t4\n\t5\t6\t7\t8\t9\t10\t11\n\t12\t13\t14\t15\t16\t17\t18\n\n\n");}}//******************************************************************** /***************************************人事管理系统1、添加用户2、查询用户3、退出系统***************************************/public class l4 {public static void main(String[] args) {System.out.print("******************************************\n\t人事管理系统\n\t1、添加用户\n\t2、查询用户\n\t2、退出系统\n******************************************\n\n");}}//******************************************************************** /*·曾造·程过·康仲伯·李敦诗*/public class l5 {public static void main(String[] args) {System.out.print("姓名:\n\b曾造\n\b陈过\n\b康仲伯\n\b李敦诗\n\n");}}//********************************************************************/*** ** ** * * * * * * **/public class l6 {public static void main(String[] args) {System.out.println(" *");System.out.println(" * *");System.out.println(" * *");System.out.println(" *********");System.out.print("\n\n");}}//******************************************************************** /*IT富豪榜排名序号名字身家1 李彦宏200亿2 马化腾150亿3 马云100亿4 陈天桥60亿*/public class l7 {public static void main(String[] args) {System.out.print("\tIT富豪榜排名\n序号\t名字\t身家\n1\t李彦宏\t200亿\n2\t马化腾\t200亿\n3\t马云\t150亿\n4\t陈天桥\t60亿");}}//******************************************************************** //定义3个整形变量,分别是3,4,5,计算他们的和public class l1{public static void main(String[] args) {int ai=3,bi=4,ci=5;System.out.println("a+b+c="+(ai+bi+ci));System.out.println();}}//******************************************************************** //输入打狗的包子数,获得屎的个数,注意:2个包子一坨屎public class l1{public static void main(String[] args) {int bao=21;System.out.println("屎的个数是"+(bao/2));System.out.println(); }}//******************************************************************** //定义2个字符串型变量,分别值为“hello”和“world”,并将他们进行拼接,打印输出public class l1{public static void main(String[] args) {String he="hello",wo="world";System.out.println(he+wo);System.out.println();}}//******************************************************************** //定义一个变量保存正方形的边长,计算此正方形的周长,及面积public class l1{public static void main(String[] args) {int bian=5;System.out.println("正方形的周长="+(4*bian)+",正方形的面积"+bian*bian);System.out.println();}}//******************************************************************** /*定义一个变量记录天数=10,计算10天共有多少小时。
1、输入格式11 510 20630import java.util.Scanner;public class Main{public static void main(String[] args){Scanner in = new Scanner(System.in);while(in.hasNextInt()){int a = in.nextInt();int b = in.nextInt();System.out.println(a + b);}}}2、输入格式221 510 20630import java.util.*;public class Main{public static void main(String[] args){Scanner in = new Scanner(System.in);int t = in.nextInt();for(int i = 0; i < t; i++){int a = in.nextInt();int b = in.nextInt();System.out.println(a + b);}}}3、输入格式31 510 200 0630import java.util.Scanner;public class Main{public static void main(String args[]){ Scanner sc=new Scanner(System.in); while(sc.hasNext()){int m=sc.nextInt();int n=sc.nextInt();if(m!=0 && n!=0){System.out.println(m+n);}}}}4、输入格式44 1 2 3 45 1 2 3 4 51015import java.util.Scanner;public class Main{public static void main(String[] args){ Scanner sc = new Scanner(System.in);while(sc.hasNext()){int m=sc.nextInt();if(m==0){break;}int i=0,sum=0;while(i<m){sum += sc.nextInt();i++;}System.out.println(sum);}}}5、输入格式524 1 2 3 45 1 2 3 4 51015import java.util.Scanner;public class Main{public static void main(String[] args){ Scanner sc = new Scanner(System.in); int t=sc.nextInt();int k=0;while(k<t){int m=sc.nextInt();int i=0,sum=0;while(i<m){sum += sc.nextInt();i++;}System.out.println(sum);k++;}}}6、输入格式64 1 2 3 45 1 2 3 4 51015import java.util.Scanner;public class Main{public static void main(String[] args){Scanner sc = new Scanner(System.in);while(sc.hasNext()){int m=sc.nextInt();int i=0,sum=0;while(i<m){sum += sc.nextInt();i++;}System.out.println(sum);}}}7、输入格式71 2 34 50 0 0 0 069import java.util.Scanner;public class Main{public static void main(String[] args){Scanner input = new Scanner(System.in);while (input.hasNext()) {String[] s = input.nextLine().split(" "); int sum = 0;for (int i = 0; i < s.length; i++) { sum += Integer.parseInt(s[i]); }System.out.println(sum);}}}8、输入格式85c d a bb ea bbcd eimport java.util.*;public class Main {public static void main(String[] args){Scanner sc = new Scanner(System.in);int n = sc.nextInt();String[] s = new String[n];for(int i = 0; i < n; i ++){s[i] = sc.next();}Arrays.sort(s);for(int i = 0;i < n; i ++){if(i != n - 1){System.out.print(s[i] + " ");}else{System.out.print(s[i]);}}}}9、输入格式9a c bbf ddddnowcodera bb cdddd fnowcoderimport java.util.Arrays;import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);while(sc.hasNextLine()){String[] str = sc.nextLine().split(" ");Arrays.sort(str);int n = str.length;for(int i = 0;i < n;++i){ //在牛客上编译竟然提示格式错误;if(i == n-1){System.out.println(str[i]);}else{System.out.print(str[i] + " ");}}}}}10、输入格式10a,c,bbf,ddddnowcodera,bb,cdddd,fnowcoderimport java.util.*;public class Main{public static void main(String[] args){Scanner input = new Scanner(System.in);while(input.hasNext()){String[] ss = input.nextLine().split(","); Arrays.sort(ss);String ans = "";for(int i = 0; i < ss.length; ++i){if(i == ss.length - 1){ans += ss[i];break;}ans += ss[i] + ",";}System.out.println(ans);}}}。
Java输入输出知识点:1、文件和流的操作,理解字节流和字符流的概念2、异常处理的概念,自定义异常类一、选择题1、如果一个程序段中有多个catch,则程序会按如下哪种情况执行? ( )A)找到合适的例外类型后继续执行后面的catchB)找到每个符合条件的catch都执行一次C)找到合适的例外类型后就不再执行后面的catchD)对每个catch都执行一次2、程序员将可能发生异常的代码放在()块中,后面紧跟着一个或多个()块。
A) catch、try B) try、catchC) try、exception D) exception、try3、在Java语言中,在程序运行时会自动检查数组的下标是否越界,如果越界,会抛掷下面的异常( )A) SQLException B) IOExceptionC) ArrayIndexOutOfBoundsExcetion D) SecurityManager4、在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){System.out.println("Exception1");}catch(Exception e){System.out.println("Exception2");}finally{System.out.println("Hello World!!");}}public void Method(){//...}public static void main(String[] args){Animal.Ani=new Animal ();Ani. Cat ();}}如果函数method正常运行并返回,会显示下面的哪些信息?( )A) Hello World B) Exception1C) Exception2 D) Hello World!!6、如果下列的方法能够正常运行,在控制台上将显示什么?( )public void example(){try{unsafe();System.out.println("Test1");}catch(SafeException e){System.out.println("Test 2");}finally{System.out.println("Test 3");}System.out.println("Test 4");}A) Test 1 B) Test 2C) Test 3 D) Test 47、以下哪一项不是File类的功能: ( )A) 创建文件B) 创建目录C) 删除文件D) 拷贝文件2、下面哪个不是InputStream类中的方法: ( )A) int read(byte[]) B) void flush()C) void close() D) int available()8、构造BufferedInputStream的合适参数是哪个?A) BufferedInputStream B) BufferedOutputStreamC) FileInputStream D) FileOuterStreamE) File9、要从文件" file.dat"文件中读出第10个字节到变量C中,下列哪个方法适合? ( )A) FileInputStream in=new FileInputStream("file.dat");in.skip(9); intc=in.read();B) FileInputStream in=new FileInputStream("file.dat"); in.skip(10); intc=in.read();C) FileInputStream in=new FileInputStream("file.dat"); int c=in.read();D) RandomAccessFile in=new RandomAccessFile("file.dat"); in.skip(9);int c=in.readByte();10、以下程序发生什么异常?class A {int x;public static void main {A x;System.out.println(x.x);}}A. IOExceptionB. InterruptExceptionC. NullPointerExceptionD. DataFormatException11、设有如下方法:public void test() {try {oneMethod();System.out.println("condition 1");} catch (ArrayIndexOutOfBoundsException e) {System.out.println("condition 2");} catch(Exception e) {System.out.println("condition 3");} finally {System.out.println("finally");}}如果oneMethod正常运行,则输出结果中有哪些?A. condition 1B. condition 2C. condition 3D. finally12、设有如下代码:public void fun () {int i;try{i=System.in.read ();System.out.println("Location 1");} catch (IOException e) {System.out.println("Location 2");} finally {System.out.println("Location 3");}System.out.println("Location 4");}如果有一个IOException发生, 则输出有哪些?A. Location 1B. Location 2C. Location 3D. Location 413、设有如下代码:1 String s = null;2 if ( s != null & s.length() > 0)3 System.out.println("s != null & s.length() > 0");4 if ( s != null && s.length() > 0)5 System.out.println("s != null & s.length() > 0");6 if ( s != null || s.length() > 0)7 System.out.println("s != null & s.length() > 0");8 if ( s != null | s.length() > 0)9 System.out.println("s != null | s.length() > 0"); 以下行中哪些会产生空指针异常。
第9章I/O系统一、选择题1、下列数据流中,属于输入流的是(b )A. 从内存流向硬盘的数据流B. 从键盘流向内存的数据流C. 从键盘流向显示器的数据流D. 从网络流向显示器的数据流2、Java语言中提供输入输出流的包是(d )A. java.sqlB. java.utilC. java.mathD. java.io3、下列流中哪一个使用了缓冲区技术?( a )A. BufferedOutputStreamB. FileInputStreamC. DataOutputStreamD. FileReader4、下列说法,错误的是( 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.inB. 打开一个文件时不可能产生IOExceptionC. 使用File对象乐意判断一个文件是否存在D. 使用File对象可以判断一个目录是否存在二、填空题1、按照流的处理数据的基本单位,I/O流包括输入输入流和输出流。
第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 类或
者writer 类的子类,它们都继承了write() 方法用于写数据。
4、DataoutputStream对象dos的当前位置写入一个保存在变量d中的浮点数的方法是dos.writerDouble 。
三、编程题
1、编写程序,利用FileReader类和FileWriter类,以及缓冲流实现将D盘下的文件in .txt复制到E盘myfile文件夹下。
1.package IOtest;
2.
3.import java.io.FileNotFoundException;
4.import java.io.FileReader;
5.import java.io.FileWriter;
6.import java.io.IOException;
7.
8.public class TxtCopy {
9.
10. /**
11. * 将C:\\的myHeart.txt copy 到 D:\\下
12. *
13. * 首先创建Reader读取数据数据的读取流对象。
14. *
15. * @throws FileNotFoundException
16. */
17. public static void main(String[] args) {
18. FileReader fr = null;
19. FileWriter fw = null;
20. try {
21. fr = new FileReader("C:\\my.txt");
22. fw = new FileWriter("D:\\you.txt");
23. //读一个字符,写一个字符方法
24.// int ch = 0;
25.//
26.// while ((ch = fr.read()) != -1) {
27.// fw.write(ch);
28.// }
29. char []buf = new char[1024];
30. int len = 0;
31. //读一个数组大小,写一个数组大小方法。
32. while((len = fr.read(buf)) != -1){
33. fw.write(buf, 0, len);
34. }
35.
36. } catch (Exception e) {
37. System.out.println(e.toString());
38. } finally {
39. if (fr != null)
40. try {
41. fr.close();
42. } catch (Exception e2) {
43. throw new RuntimeException("关闭失败!");
44. }
45. if (fw != null)
46. try {
47. fw.close();
48. } catch (IOException e) {
49. throw new RuntimeException("关闭失败!");
50. }
51. }
52. }
53.}。