字节流
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class BytesTest {
public static void main(String[] args) throws IOException {
try (FileInputStream in = new FileInputStream("original.txt");
FileOutputStream out = new FileOutputStream("byteout.txt")) {
int c;
while ((c = in.read()) != -1) {
out.write(c);
}
}
}
}
public static void main(String[] args) throws IOException {
FileInputStream in = null;
FileOutputStream out = null;
try {
in = new FileInputStream("original.txt");
out = new FileOutputStream("byteout.txt");
int c;
while ((c = in.read()) != -1) {
out.write(c);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (in != null) {
in.close();
}
if (out != null) {
out.close();
}
}
}
字符流
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class CharactersTest {
public static void main(String[] args) throws FileNotFoundException, IOException {
try(FileReader in = new FileReader("original.txt");
FileWriter out = new FileWriter("characterout");){
int c;
while ((c = in.read()) != -1) {
out.write(c);
}
}
}
}
使用字节流的字符流
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
Writer out = new BufferedWriter(new OutputStreamWriter(System.out));
线性I/O
public class LineTest { public static void main(String[] args) throws FileNotFoundException, IOException { try(BufferedReader in = new BufferedReader(new FileReader("original.txt")); PrintWriter out = new PrintWriter(new FileWriter("lineout.txt"))){ String l; while ((l = in.readLine()) != null) { out.println(l); } } } }
缓冲流
BufferedReader in = new BufferedReader(new FileReader("original.txt")); PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("bufferout.txt")))
刷新缓冲流
扫描与格式化
Scanner
public class ScannerTest {
public static void main(String[] args) throws FileNotFoundException {
try(Scanner scanner = new Scanner(new BufferedReader(new FileReader("original.txt")))){
while (scanner.hasNext()) {
System.out.println(scanner.next());
}
}
}
}
public class ScannerTest2 {
public static void main(String[] args) throws IOException {
Scanner s = new Scanner(new BufferedReader(new FileReader("number.txt")));
while (s.hasNext()) {
if (s.hasNextInt()) {
System.out.println("int: " + s.nextInt());
} else if (s.hasNextDouble()) {
System.out.println("double: " + s.nextDouble());
} else if (s.hasNextBoolean()) {
System.out.println("boolean: " + s.nextBoolean());
} else {
System.out.println("String: " + s.next());
}
}
s.close();
}
}
Scanner sc = new Scanner(System.in);
int i = sc.nextInt();
public static void main(String[] args) throws IOException {
String input = "1 fish 2 fish red fish blue fish";
Scanner s = new Scanner(input);
s.useDelimiter("\\s*fish\\s*");
System.out.println(s.nextInt());
System.out.println(s.nextInt());
System.out.println(s.next());
System.out.println(s.next());
s.close();
}
输出为:
- print & println 以一种常规的方式输出各个变量
- format 提供了多种控制输出格式的字符,让你可以使用指定格式来输出输出
public class PrintTest {
public static void main(String[] args) {
int num = 3;
double result = Math.sqrt(num);
System.out.println("The result of sqrt(3) is: " + result);
}
}
public class PrintTest {
public static void main(String[] args) {
int num = 3;
double result = Math.sqrt(num);
System.out.format("The square root of %d is %f.%n",num,result);
}
}
命令行I/O
InputStreamReader cin = new InputStreamReader(System.in)
public class PasswordDemo {
public static void main(String[] args) {
Console c = System.console();
if (c == null) {
//不可以使用控制台,操作系统不支持或者是程序运行在不可交互的环境下
System.err.println("No console.");
System.exit(1);
}
String login = c.readLine("请输入用户名: ");
char[] oldPassword = c.readPassword("请输入密码: ");
if (verify(login, oldPassword)) {
boolean noMatch;
do {
char[] newPassword1 = c.readPassword("输入新密码: ");
char[] newPassword2 = c.readPassword("请重新输入密码: ");
noMatch = !Arrays.equals(newPassword1, newPassword2);
if (noMatch) {
c.format("密码不匹配,请重新输入%n");
} else {
change(login, newPassword1);
c.format("%s 密码修改成功.%n", login);
}
Arrays.fill(newPassword1, ' ');
Arrays.fill(newPassword2, ' ');
} while (noMatch);
}
Arrays.fill(oldPassword, ' ');
}
// 模拟验证用户的正确性
static boolean verify(String login, char[] password) {
//在此我们假设用户名和密码匹配,既可以登陆
//你可以根据自己的逻辑来验证用户的正确性
return true;
}
// 模拟修改密码
static void change(String login, char[] password) {
// 根据程序实际的逻辑修改用户的密码
}
}
Data Stream(数据流)
public class DataStreamTest {
static final double[] prices = { 19.99, 9.99, 15.99, 3.99, 4.99 };// 价格表
static final int[] units = { 12, 8, 13, 29, 50 };// 数量表
static final String[] descs = { "衬衫", "裙子", "洋娃娃", "杯子", "袜子" };// 商品目录表
public static void main(String[] args) throws IOException {
try (DataOutputStream out = new DataOutputStream(new BufferedOutputStream(new FileOutputStream("invoice")))) {
// 将清单上数据输出到invoice文件里
for (int i = 0; i < prices.length; i++) {
out.writeDouble(prices[i]);
out.writeInt(units[i]);
out.writeUTF(descs[i]);//输入utf-8编码格式输出字符串
}
}
double total = 0.0;
try (DataInputStream in = new DataInputStream(new BufferedInputStream(new FileInputStream("invoice")))) {
double price;
int unit;
String desc;
try {
while (true) {
price = in.readDouble();
unit = in.readInt();
desc = in.readUTF();//以utf-8编码格式读取字符串
System.out.format("%d 件 %s 的价格是 $%.2f%n", unit, desc, price);
total += unit * price;
}
} catch (EOFException e) {
//输入过程中意外到达文件末尾时,抛出异常。
}
System.out.format("总价格是: $%.2f%n", total);
}
}
}
对象流
public class ObjectStreamDemo {
public static void main(String[] args) {
// 构建Vector对象
Vector<String> v = new Vector<>();
v.add("语文");
v.add("数学");
v.add("英语");
try (ObjectOutputStream objOut = new ObjectOutputStream(new FileOutputStream(new File("object")))) {
// 写入日期对象
objOut.writeObject(new Date());
// 写入Vector对象
objOut.writeObject(v);
// 构建readObj的实例
readObj rObj = new readObj();
// 调用方法输出
rObj.readO();
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
};
// 自定义类,实现读取对象并输出
class readObj extends Object {
public void readO() {
try (ObjectInputStream objIn = new ObjectInputStream(new FileInputStream(new File("object")))) {
// 读取对象输出
Object ob1 = objIn.readObject();
System.out.println(ob1);
Object ob2 = objIn.readObject();
System.out.println(ob2);
} catch (IOException e) {
System.out.println(e.getMessage());
} catch (ClassNotFoundException e) {
System.out.println(e.getMessage());
}
}
}