输入与输出

  • 实验目的和要求
  • 实验内容
  • 实验记录
  • 遇到的问题和解决方法
  • 心得体会


实验目的和要求

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

}

java可以直接输出中文吗_java可以直接输出中文吗


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

java可以直接输出中文吗_Java_02


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

java可以直接输出中文吗_java_03


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("文件不同");
		}
	}
}

java可以直接输出中文吗_System_04


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

java可以直接输出中文吗_System_05

遇到的问题和解决方法

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两个类的层次体系来处理输入/输出。