输入与输出
- 实验目的和要求
- 实验内容
- 实验记录
- 遇到的问题和解决方法
- 心得体会
实验目的和要求
(1) 掌握Java两种基本输入/输出流类的使用。
(2) 掌握Java文件类型的使用。
(3) 掌握文件的输入、输出方法。
实验内容
(1) 编写程序,实现从键盘输入字符串并在屏幕上输出。
(2) 利用Java文件类File的方法,获取磁盘文件的文件名、长度、大小等特性。
(3) 编写程序,利用Java字符流文件输入/输出类,实现将源程序复制到另一个文件中。
(4) 编写一个程序,比较两个文件的内容是否相同。
(5) 编写一个程序,求2~200之间的素数,并将结果保存在文件prime.dat中。再从该文件中读取内容并在屏幕上显示出来。
实验记录
1.//编写程序,实现从键盘输入字符串并在屏幕上输出。
import java.io.*;
public class t71 {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入");
String str=bf.readLine();
System.out.println("您输入的是:"+str);
}
}
2. //利用Java文件类File的方法,获取磁盘文件的文件名、长度、大小等特性。
import java.io.*;
import java.nio.channels.*;
import java.nio.file.*;
public class t72 {
public static void main(String[] args) {
// TODO Auto-generated method stub
File f1=new File("./sub1");
//获取文件名
String str=f1.getName();
System.out.println("f1'name: "+str);
//文件长度
System.out.println("f1'parentFile'lengh: "+f1.getParentFile().length()/1024+"bk");
//文件大小
str="D:\\Downloads\\linus-nylund-Q5QspluNZmM-unsplash.jpg";
Path fp=Paths.get(str);
FileChannel fc;
try {
fc=FileChannel.open(fp);
long size=fc.size();
System.out.println(size+"byte");
fc.close();
} catch (IOException e) {
// TODO Auto-generated catch block
//e.printStackTrace();
System.out.println(e.toString());
}
}
}
3. //编写程序,利用Java字符流文件输入/输出类,实现将源程序复制到另一个文件中
package javatest;
import java.io.*;
public class t73 {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
FileReader f1=new FileReader("D:\\ProgramData\\eclipse-workplace\\javapro\\src\\javatest\\t73.java");
BufferedReader bf = new BufferedReader(f1);
int value = 0;
value = f1.read();
String str=""+(char)value;
while (value != -1) {
str+=(char)value;
//System.out.print((char)value);
value = f1.read();
}
bf.close();
FileWriter fw=new FileWriter("D:\\ProgramData\\eclipse-workplace\\javapro\\src\\S9\\filestream.txt");
BufferedWriter bw=new BufferedWriter(fw);
fw.write(str);
fw.close();
}
}
4. //编写一个程序,比较两个文件的内容是否相同。
import java.io.*;
public class t74 {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
FileReader f1=new FileReader("D:\\ProgramData\\eclipse-workplace\\javapro\\src\\S9\\filestream.txt");
FileReader f2=new FileReader("D:\\ProgramData\\eclipse-workplace\\javapro\\src\\S9\\is_same.txt");
BufferedReader br1=new BufferedReader(f1);
BufferedReader br2=new BufferedReader(f2);
int value1=f1.read();
int value2=f2.read();
int i=1;
while((value1!=-1)||(value2!=-1)) {
if(value1!=value2) {
System.out.print("文件不同");
return;
}
value1=f1.read();
value2=f2.read();
}
if((value1==-1)&&(value2==-1)) {
System.out.println("文件相同");
}else {
System.out.println("文件不同");
}
}
}
5. //编写一个程序,求2~200之间的素数,并将结果保存在文件prime.dat中。再从该文件中读取内容并在屏幕上显示出来。
import java.io.*;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class t75 {
public static void main(String[] args) {
File file = new File("./prime.dat");
FileWriter fw = null;
try{
fw = new FileWriter(file);
BufferedWriter bw = new BufferedWriter(fw);
for(int i = 2; i <= 200; i++){
boolean isFlag = true;//true素数
for(int j = 2; j <= Math.sqrt(i); j++){
if(i % j == 0){
isFlag = false;
break;
}
}
if(isFlag){
bw.write("" + i); //拼接成串,为了在文件中不乱码
bw.flush();
bw.newLine();
}
}
}catch(Exception e){
e.printStackTrace();
}finally{
if(fw != null){
try {
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
遇到的问题和解决方法
1.当我比较两个文件内容一样的文件时发现程序控制台输出为乱码,原来是我的两个文件一个使用java代码创建,一个实在文件资源库手动创建的,他们两种文件的编码方式不一样,
2.用java创建的是用的ANSI,而另一个使用的UTF_8,最后为了解决这个问题,我选择用java创建两个同样编码的文件,这样就可以正常输出了发现原来用file.read方法读的数据类型是整型,只有用char把整型转换成字符型,然后逐个放到字符串里面
3.发现FileChannel方法能获取JPG,PNG,PDF等文件的大小,获取不了文件夹的大小
4.发现BufferedReder的readLine()方法要抛出异常
心得体会
1.在用FileReader打开文件是不能自动创建文件的所以要抛出文件找不到的异常
2.用循环语句,文件读取到末尾是返回的整型值是-1,无论是文件输出流还是文件输入流最后都应该关闭流用close
3.第一次使用了java.nio包里面的方法,学会使用了FileChannel方法BufferedReader可以实现一些Scanner的功能
java把文件都看作字节或字符的顺序流。使用java.io包中的流类实现java文件的输入/输出
4.java提供了字节流InputStream和OutputStream以及字符流Reader和Writer两个类的层次体系来处理输入/输出。