控制台的输入输出操作
java.io包中包含了输入输出所需要的类,因此在做输入输出操作时都需要导入这个包。
Java的控制台输入是由System.in来完成的,一般需要用InputStreamReader类和BufferedReader类来包装,用法如下:
import java.io.*;
public class javaIO {
// 在下面使用read()方法读取字符时此处需要抛出IOException异常
public static void main(String[] args) throws IOException{
// 先用InputStreamReader类读取System.in的控制台输入;
// 然后用BufferedReader类来包装,创建一个字符流。
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 创建一个接受器
char ch;
System.out.println("输入字符,按下'q'键退出。");
// 利用do...while循环来读取字符
do{
// 从BufferedReader中读取字符需要使用到read()方法
ch = (char)br.read();
System.out.println(ch);
} while(ch != 'q');
}
}
运行结果为:
输入字符,按下'q'键退出。
Jay Zhou
J
a
y
Z
h
o
u
q
q
介绍一些BufferReader类的方法:
方法 | 功能 |
---|---|
int read() | 读取单个字符 |
int read(char[] cbuf, int off, int len) | 将字符读入数组的某一部分 |
String readLine() | 读取一个文本行 |
long skip(long n) | 跳过字符 |
void mark(int readAheadLimit) | 标记流中的当前位置 |
void reset() | 将流重置到最新的标记 |
void close() | 关闭该流并释放与之关联的所有资源 |
以上是读取操作,同样的也有一个write()方法用于输出,但在java中有着println()方法,使用起来要更方便一些。
使用Scanner类进行输入输出操作
Scanner类的基本语法:
Scanner sc = new Scanner(System.in);
这是从网上找的一个方法描述,对NextXxx方法的描述还挺全的。
总体来说分为两类,一类是直接读取数据的方法,也就是第一张图中所述;一类是判断方法,返回的都是boolean值,用来判断输入的情况,两者搭配使用代码更为健壮。
import java.util.Scanner;
public class scanDemo {
public static void main(String[] args) {
// 生成Scanner对象
Scanner sc = new Scanner(System.in);
String name = "";
int age = 0;
System.out.print("你最喜欢的歌手的名字是:");
// 判断是否有输入
if(sc.hasNextLine()){
name = sc.nextLine();
System.out.println("名字是:" + name);
}
System.out.print("他年龄多大,请输入:");
// 判断输入的是否为Int类型
if (sc.hasNextInt()) {
// 接收输入的Int数据
age = sc.nextInt();
System.out.println("年龄是:" + age);
} else {
// 错误提示
System.out.println("您输入的不是整数,请重新输入!");
}
sc.close();
}
}
运行结果为:
你最喜欢的歌手的名字是:周杰伦
名字是:周杰伦
他年龄多大,请输入:41
年龄是:41
读写文件操作
文件读取
利用FileInputStream进行文件读取,通过输入文件名来进行,用法如下:
// 方法1
// FilePathName要用/来隔开
InputStream is = new FileInputStream(String FilePathName);
// 方法2
// 创建文件对象
File f = new File(String FilePathName);
InputStream is = new FileInputStream(f);
文件读取流中的一些方法:
方法 | 功能描述 |
---|---|
public int read(int r) throws IOException{} | 这个方法从 InputStream 对象读取指定字节的数据。返回为整数值。返回下一字节数据,如果已经到结尾则返回-1。 |
public int read(byte[] r) throws IOException{} | 这个方法从输入流读取r.length长度的字节。返回读取的字节数。如果是文件结尾则返回-1。 |
public int available() throws IOException{} | 返回下一次对此输入流调用的方法可以不受阻塞地从此输入流读取的字节数。返回一个整数值。 |
protected void finalize() throws IOException {} | 这个方法清除与该文件的连接。确保在不再引用文件输入流时调用其 close 方法。抛出IOException异常。 |
public void close() throws IOException{} | 关闭此文件输入流并释放与此流有关的所有系统资源。抛出IOException异常。 |
文件输出/写入
利用FileOutputStream进行文件写入,通过输入文件名来进行,如果在打开文件进行输出之前文件不存在,那么就会创建该文件,用法如下:
// 方法1
OutputStream is = new FileOutputStream(String FilePathName);
// 方法2
// 创建文件对象
File f = new File(String FilePathName);
OutputStream is = new FileOutputStream(f);
文件读取流中的一些方法:
方法 | 功能描述 |
---|---|
public void write(int w)throws IOException{} | 这个方法把指定的字节写到输出流中。 |
public void write(byte[] w) | 把指定数组中w.length长度的字节写到OutputStream中。 |
protected void finalize() throws IOException {} | 这个方法清除与该文件的连接。确保在不再引用文件输入流时调用其 close 方法。抛出IOException异常。 |
public void close() throws IOException{} | 关闭此文件输入流并释放与此流有关的所有系统资源。抛出IOException异常。 |
代码演示:
import java.io.*;
public class fileDemo {
public static void main(String[] args) throws IOException{
try{
// 创建文件输出对象
OutputStream os = new FileOutputStream("C:\\Users\\mirror\\Desktop\\a.txt");
// 要输出的文件信息,也就是内容
String text = "Wo yi lu xiang bei, li kai you ni de ji jie; " +
"ni shuo ni hao lei, yi wu fa zai ai shang shui.";
// 由于os.write()函数只能写入byte类型的数据,因此需要转换
// 在此利用String的getBytes()方法进行转换
byte[] byt = text.getBytes();
// 直接写入
os.write(byt);
// 完成操作后记得关闭流
os.close();
// 创建文件读取对象
InputStream is = new FileInputStream("C:\\Users\\mirror\\Desktop\\a.txt");
// 读取字节数
int size = is.available();
// 从文件中读取数据
for(int i = 0; i < size; i++){
System.out.print((char)is.read());
}
// 关闭流,这一步一定要做
is.close();
}catch(IOException e){
System.out.println("Exception.");
}
}
}
文件写入结果:
文件读取结果: