控制台输入
- 我们可以将System.in包装在一个 BufferedReader 对象来实现控制台输入
//控制台IO流,我们使用BufferedReader封装InputStreamReader来实现,或者也可以使用Scanner来实现
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.*;
public class IO {
public static void main(String[] args) throws IOException {
System.out.println("我擦");
BufferedReader bReader = new BufferedReader(new InputStreamReader(System.in));//java5之后可以直接使用Scanner来获取控制台输入
System.out.println(bReader.readLine());//readLine()是读完,read()是一个字符一个字符读(可以设置读取结束标志)
}
}
//注意IO输入输出流一定要有try IOException或者主函数上加throws IOException
2.jdk5以后我们可以使用Scanner类来实现控制台输入
import java.util.Scanner;
public class KongZhiTaiShuRu {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("输入int:");
double age=input.nextDouble();
System.out.println("age:"+age);
}
}
文件输入输出
1.基本的读写操作,使用FileOutputStream和FileInputStream(代码来源)Stream表示字节流输入输出一次读入或读出是8位二进制
//FileOutputStream和FileInputStream对具体文件的读写操作
import java.io.*;
public class IO1 {
public static void main(String[] args) {
try {
byte bWrite[] = { 11, 21, 3, 40, 5 };
OutputStream os = new FileOutputStream("test.txt");//这个文件是用来输出的
for (int x = 0; x < bWrite.length; x++) {
os.write(bWrite[x]); // writes the bytes
}
os.close();
InputStream is = new FileInputStream("test.txt");//这个文件使用来读取的
int size = is.available();
System.out.println("size:"+size);
for (int i = 0; i < size; i++) {
System.out.print((char) is.read() + " ");
}
is.close();
} catch (IOException e) {//这里这个e无所谓
System.out.print("Exception");
}
}
}
//注意IO输入输出流一定要有try IOException或者主函数上加throws IOException
- 可以定义具体的writer和reader对象,来控制输出格式和防止乱码(代码来源)后缀是Reader,Writer是字符流一次读入或读出是16位二进制
import java.io.*;
public class IO3{
public static void main(String[] args) throws IOException {
File f = new File("a.txt");
OutputStream fop = new FileOutputStream(f);
// 构建FileOutputStream对象,文件不存在会自动新建
OutputStreamWriter writer = new OutputStreamWriter(fop, "UTF-8");
// 构建OutputStreamWriter对象,参数可以指定编码,默认为操作系统默认编码,windows上是gbk
writer.append("中文输入");
// 写入到缓冲区
writer.append("\r\n");
// 换行
writer.append("English");
// 刷新缓存冲,写入到文件,如果下面已经没有写入的内容了,直接close也会写入
writer.close();
// 关闭写入流,同时会把缓冲区内容写入文件,所以上面的注释掉
fop.close();
// 关闭输出流,释放系统资源
InputStream fip = new FileInputStream(f);
// 构建FileInputStream对象
InputStreamReader reader = new InputStreamReader(fip, "UTF-8");
// 构建InputStreamReader对象,编码与写入相同
StringBuffer sb = new StringBuffer();
while (reader.ready()) {
sb.append((char) reader.read());
// 转成char加到StringBuffer对象中
}
System.out.println(sb.toString());
reader.close();
// 关闭读取流
fip.close();
// 关闭输入流,释放系统资源
}
}
2.使用BufferedReader和BufferedWriter分别封装InputStreamReader和OutputStreamWriter(字节转化成字符流)来实现读写:
读取:(带缓冲区的处理流、缓冲区的作用的主要目的是:避免每次和硬盘打交道、提高数据访问的效率)
import java.io.*;
public class IO2 {
public static void main(String[] args) throws IOException {
InputStream f=new FileInputStream("1.txt");
BufferedReader b=new BufferedReader(new InputStreamReader(f));//
System.out.println(b.readLine());
}
}
写入:
import java.io.*;
public class IO4 {
public static void main(String[] args) throws IOException {
OutputStream f=new FileOutputStream("1.txt");
BufferedWriter b=new BufferedWriter(new OutputStreamWriter(f));
b.write("Hello World!");
b.close();
f.close();
}
}
BufferedWriter和BufferedReader的好处:读的和写的都会先进入缓冲区,提升效率。
这篇博客写的很详细