Java中输入输出
Posted nuist__NJUPT
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中输入输出相关的知识,希望对你有一定的参考价值。
Java中输入输出
- 目前Java支持文件I/O和流式I/O,数据流可分为二进制流和文本流,也称为字节流和字符流
- 它们处理信息的基本单位分别为字节和字符
- java.io.File类用来表示物理磁盘上的实际文件或者目录,但是它不表示文件中的数据
import java.io.File;
import java.io.IOException;
public class FileDemo {
public static void main(String[] args){
File file = new File("Hello.text") ;//创建一个表示文件的对象,此时文件还不存在
try{
boolean success = false ; //表示文件是否创建成功
System.out.println(file.exists()) ; //创建的文件是否存在,此时,文件并不存在
success = file.createNewFile() ;//创建文件
System.out.println(success) ;//文件创建成功
System.out.println(file.exists()) ; //输出文件是否存在
System.out.println(file.length()) ; //输出文件的长度
file.delete() ; //删除文件
System.out.println(file.lastModified()) ; //最后一次修改的时间
}catch(IOException e){ //捕获异常并处理
System.out.println(e.toString()) ;
}
}
}
- 使用FileOutputStream对象向文件output.dat文件中写入10个10-99的随机整数
- 然后使用FileInputStream对象从output.dat文件中读出这10个数并输出
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class OutputInputDemo {
public static void main(String[] args) throws IOException { //抛出异常
//向文件中写数据
File outputFile = new File("output.dat") ;//创建文件对象
try(FileOutputStream out = new FileOutputStream(outputFile) ;){ //以文件对象创建文件输出流对象
for(int i=0; i<10; i++){
int x = (int)(Math.random() * 90 + 10) ; //随机生成两位整数
out.write(x) ; //写入文件中
}
}catch(IOException e){
System.out.println(e.toString()) ;
}
//从文件中读出数据
File file = new File("output.dat") ; //创建文件对象
try(FileInputStream in = new FileInputStream(file) ;){
int c = in.read() ; //读出数据
while(c != -1){ //当文件中无数据时结束循环
System.out.print(c + " ") ;
c = in.read() ; //读出下一个字节
}
}catch(IOException e){
System.out.println(e.toString()) ;
}
System.out.println("数据读取完毕!") ;
}
}
- 常用的二进制输入输出流包括:FileInputStream类和FileOutputStream类:它们用来实现文件的输入输出处理,
- 由它们提供的方法可以打开本地机上的文件,并进行顺序的读写。
- BufferedInputStream类和BufferedOutPutStream类:用来实现缓冲功能,减少数据的读写次数,加快数据的输出速度
- DataInputStream类和DataOutputStream类:使用它们可以实现基本数据类型的输入输出
- 下面使用DataOutputStream流将数据写到文件中,使用DataInputStream流读取数据并在控制台输出
import java.io.*;
public class DataStreamDemo {
public static void main(String[] args){
//向文件中写入数据
try(FileOutputStream output = new FileOutputStream("data.dat");//使用文件名创建文件输出流对象
//将文件输出流对象包装成缓冲输出流,最后包装成数据输出流对象
DataOutputStream dataOutputStream = new DataOutputStream(new BufferedOutputStream(output));){
dataOutputStream.writeDouble(123.456) ; //写入double型数据
dataOutputStream.writeInt(100) ; //写入整形数据
dataOutputStream.writeChar('s') ; //写入字符型数据
dataOutputStream.writeBoolean(true) ; //写入布尔型数据
dataOutputStream.writeUTF("Java语言") ; //将字符串按UTF-8格式输入
}catch(IOException e){
System.out.println(e.toString()) ;
}
//从文件读出数据
try(FileInputStream input = new FileInputStream("data.dat") ;
DataInputStream dataInputStream = new DataInputStream(new BufferedInputStream(input)) ;){
//只要文件中有数据,则循环
while(dataInputStream.available() > 0){ //必须依次读入
double d = dataInputStream.readDouble() ;
int i = dataInputStream.readInt() ;
char c = dataInputStream.readChar() ;
boolean b = dataInputStream.readBoolean() ;
String s = dataInputStream.readUTF() ;
System.out.println("d = " + d + " i = "+ i + " c = " + c + " b = "+ b + " s = " + s) ;
}
}catch(IOException e){
System.out.println(e.toString()) ;
}
}
}
- 以字符为单位的文本I/O流,也称为字符I/O流
- 抽象类的Reader和Writer分别是文本输入输出流的根基,它们实现了字符的读写
- FileReader类和FileWriter类是文件输入输出流
- FileReader类是InputStreamReader的子类,实现二进制输入流向文本流转换的功能
- FileWriter类是OutputStreamWriter的子类,实现文本输出流向二进制流转换的功能
- 下面使用FileReader和FileWriter将input.txt的内容复制到output.txt中
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class FileCopyDemo {
public static void main(String[] args){
File inputFile = new File("input.txt") ;
File outputFile = new File("output.txt") ;
try(FileReader in = new FileReader("inputFile") ;
FileWriter out = new FileWriter("outputFile.txt") ;){
int c = in.read() ;
while(c != -1){
out.write(c) ;
c = in.read() ;
}
}catch(IOException e){
System.out.println(e.toString()) ;
}
}
}
- BufferedReader和BufferedWriter类分别是实现了具有缓冲功能的字符输入输出流,
- 两个类用来将其它的字符类包装成缓冲字符流,以提高数据的读写效率。
import java.io.BufferedReader;
import java.io.FileReader;
public class Main {
public static void main(String[] args) throws Exception{
String fileName = "article.txt" ; //定义一个名为article的文本文件
FileReader inFile = new FileReader(fileName) ; //以文件名创建文件输入流对象
BufferedReader reader = new BufferedReader(inFile) ; //将文件输入流对象包装成缓冲输入流对象
int sum = 0 ;
String aLine = reader.readLine() ;
while(aLine != null){
String [] words = aLine.split("[,. ]") ; //按空格,逗号和点号分割字符串
sum = sum + words.length ; //统计每行单词个数
aLine = reader.readLine() ; //继续读下一行
}
reader.close() ; //关闭文件输入流对象
System.out.println("sum = " + sum) ; //打印单词个数
}
}
- PrinterWriter类实现字符打印输出流,随机产生10个100-200的整数
- 然后使用PrinterWriter对象输出文件到number.txt中
import java.io.*;
public class PrintWriterDemo {
public static void main(String[] args) throws IOException {
String fileName = "number.txt" ;
FileWriter out = new FileWriter(fileName) ;
PrintWriter printWriter = new PrintWriter(out,true) ;//创建文件打印输出流对象,并在输出时候 自动刷新输出流
//向文件中随机写入10个整数
for(int i=0; i<10; i++){
int number = (int)(Math.random() * 101) + 100 ;
printWriter.println(number) ; //将数字输出到文件中
}
//从文件中读10个整数
FileReader fileReader = new FileReader(fileName) ; //创建文件输入流对象
BufferedReader bufferedReader = new BufferedReader(fileReader) ; //将文件输入流包装成缓冲输入流
String aLine = bufferedReader.readLine() ; //按行读入
while(aLine != null){
System.out.println(aLine) ; //输出每行
aLine = bufferedReader.readLine() ; //继续读入下一行
}
printWriter.close() ;
bufferedReader.close() ;
}
}
- 使用Scanner类从键盘读取数据,在创建Scanner对象时,将标准输入设备System.in作为其构造方法的参数
- 使用Scanner还可以关联文本文件,从文本文件中读取数据
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Scanner;
public class TextFileDemo {
public static void main(String[] args){
File file = new File("number.txt") ;
try(FileInputStream input = new FileInputStream(file) ;
Scanner scanner = new Scanner(input) ;){//用指定的输入流构成一个Scanner对象
while(scanner.hasNextInt()){ //该文件还有下一个标记时循环
int token = scanner.nextInt() ;
System.out.println(token) ;
}
}catch(IOException e){
System.out.println(e.toString()) ;
}
}
}
以上是关于Java中输入输出的主要内容,如果未能解决你的问题,请参考以下文章