2018.7.26
1、读取控制台输入
java中的控制台输入由System.in
完成,为了获得一个控制台的字符流,可以把System.in
包装在一个BufferedReader
对象中来创建一个字符流:
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedReader
对象创建后,可以使用read()
方法从控制台读取一个字符,或者使用readLine()
方法读取一个字符串。
下面的例子示范了使用read()
方法从控制台读取字符:
import java.io.*;
public class BRRead {
public static void main(String[] args) throws IOException {
char c;
//使用System.in创建BufferedReader
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Please input the char:");
c = (char)br.read();
System.out.println(c);
}
}
2、从控制台读取字符串
从标准输入读取字符串需要使用BufferedReader
的readLine()
方法。
import java.io.*;
public class BRReadLines {
public static void main(String[] args) throws IOException {
//使用System.in创建BufferedReader
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str;
System.out.println("Enter lines of text : ");
System.out.println("Enter 'end' to quit.");
do {
str = br.readLine();
System.out.println(str);
} while (!str.equals("end"));
}
}
3、控制台输出
除了之前经常使用的print()
与println()
方法,write()
也可以用来控制台写操作。
void write(int byteval); //该方法将byteval的低八位写到流中
write()
方法并不常用,因为没有print()
与println()
方法用起来方便。
4、读写文件
读写文件操作使用的两个重要流是:FileInputStream
和FileOutputStream
。
FileInputStream
可以使用字符串类型的文件名来创建一个输入流对象来读取文件:
InputStream f = new FileInputStream("C:/java/hello");
也可以使用一个文件对象来创建一个输入流对象来读取文件。首先使用File()
方法来创建文件对象:
File f = new File("C:/java/hello");
InputStream out = new FileInputStream(f);
FileOutputStream
该类用于创建一个文件并向其中写数据,同样有两种方法进行创建:
OutputStream f = new FileOutputStream("C:/java/hello");
File f = new File("C:/java/hello");
OutputStream f = new FileOutputStream(f);
下面是一个演示InputStream
和OutputStream
用法的例子:
import java.io.*;
public class fileStreamTest {
public static void main(String[] args) {
try{
byte bWrite [] = {11,21,3,40,5};
OutputStream os = new FileOutputStream("test.txt");
for (int i = 0; i < bWrite.length; ++i) {
os.write(bWrite[i]);
}
os.close();
InputStream is = new FileInputStream("test.txt");
int size = is.available();
for (int i = 0; i < size; ++i) {
System.out.println((char)is.read() + " ");
}
is.close();
}catch(IOException e) {
System.out.println("Exception");
}
}
}
5、java中的目录
File类中有两个方法用来创建文件夹:
· mkdir()
方法创建一个文件夹;
· mkdirs()
方法创建一个文件夹和他所有的父文件夹。
import java.io.File;
public class CreateDir {
public static void main(String[] args) {
String dirname = "./createDir";
File d = new File(dirname);
d.mkdirs();
System.out.println("Create dir successfully.");
}
}
读取目录
一个目录就是一个File对象,包含其他文件和文件夹。
调用isDirectory()
方法可以判断File对象是否为一个目录。
也可以通过list()
方法,提取其中所包含的文件和文件夹列表。
import java.io.File;
public class DirList {
public static void main(String[] args) {
String dirname = "./createDir";
File f1 = new File(dirname);
if (f1.isDirectory()) {
System.out.println("目录:" + dirname);
String[] s = f1.list();
for (int i = 0; i < s.length; ++i) {
File f = new File(dirname + "/" + s[i]);
if (f.isDirectory()) {
System.out.println(s[i] + "is a Dir");
}else {
System.out.println(s[i] + "is a File");
}
}
}else {
System.out.println(dirname + "is not a Dir");
}
}
}
![](https://img.haomeiwen.com/i10118224/975dc4b08c1d9d00.png)
删除目录或文件
删除文件可以使用java.io.File.delete()
方法。
6、java中的Scanner
类
java.util.Scanner
是java5的新特征,可以通过Scanner
类来获取用户的输入。
Scanner s = new Scanner(System.in);
下面是一个使用Scanner
类中的next()
和nextLine()
方法获取输入的字符串的两个例子:
import java.util.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
//从键盘接受数据
//next方法接受字符串
System.out.println("next方法接收:");
//判断是否还有输入
if (scan.hasNext()) {
String str1 = scan.next();
System.out.println("The input is : " + str1);
}
scan.close();
}
}
![](https://img.haomeiwen.com/i10118224/910231ea790740c1.png)
import java.util.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
//从键盘接受数据
//nextLine方法接受字符串
System.out.println("nextLine方法接收:");
//判断是否还有输入
if (scan.hasNextLine()) {
String str1 = scan.nextLine();
System.out.println("The input is : " + str1);
}
scan.close();
}
}
![](https://img.haomeiwen.com/i10118224/1b8f16d4b8ba8975.png)
![](https://img.haomeiwen.com/i10118224/4df2d193288d59e7.png)
7、Java的异常处理
可以使用try...catch
语句进行异常捕获:
try {
file = new FileInputStream(fileName);
x = (byte) file.read();
} catch (IOException i) {
i.printStackTrace();
return -1;
} catch (FileNotFoundException f) {
f.printStackTrace();
return -1;
}
throws/throw 关键字
如果一个方法没有捕获一个检查性异常,那么该方法必须使用throw
关键字来声明。throws
关键字放在方法签名尾部:
import java.io.*;
public class className {
public void deposit(double amount) throws RemoteException {
//Method implementation
throw new RemoteException();
}
} //之后就可以使用try catch来捕获这个异常。
finally关键字
finally
关键字用来创建在try
代码块后面执行的代码块;无论异常是否发生,finally
代码块中的代码总会被执行,在这里可以运行清理类型等收尾善后性质的语句。
try{
// 程序代码
}catch(异常类型1 异常的变量名1){
// 程序代码
}catch(异常类型2 异常的变量名2){
// 程序代码
}finally{
// 程序代码
}
声明自定义异常
![](https://img.haomeiwen.com/i10118224/f44dece4b70fb2e1.png)
下面是一个完整的自定义异常实例(一个银行账户的模拟,通过银行卡号完成识别,进行存钱取钱的操作):
/*自定义异常类 InsufficientFundsException.java*/
import java.io.*;
//自定义异常类,继承Exception
public class InsufficientFundsException extends Exception{
//此处的amount用来存储当前出现的异常(取出钱多于余额时)所缺乏的钱
private double amount;
public InsufficientFundsException(double amount) {
this.amount = amount;
}
public double getAmount() {
return amount;
}
}
/*使用上面定义的异常类 CheckingAccount.java*/
import java.io.*;
//此类模拟银行账户
public class CheckingAccount {
//balance为余额,number为账号
private double balance;
private int number;
public CheckingAccount(int number) {
this.number = number;
}
//存钱
public void deposit(double amount) {
balance += amount;
}
//取钱
public void withdraw(double amount) throws
InsufficientFundsException {
if (amount <= balance) {
balance -= amount;
}
else {
double needs = amount - balance;
throw new InsufficientFundsException(needs);
}
}
//返回余额
public double getBalance() {
return balance;
}
//返回卡号
public int getNumber() {
return number;
}
}
/*调用CheckingAccount类 BankDemo.java*/
public class BankDemo {
public static void main(String[] args) {
CheckingAccount c = new CheckingAccount(101);
System.out.println("Depositing $500...");
c.deposit(500.00);
try {
System.out.println("Withdrawing $100...");
c.withdraw(100.00);
System.out.println("Withdrawing $600...");
c.withdraw(600.00);
} catch(InsufficientFundsException e) {
System.out.println("Sorry, but you are short $" + e.getAmount());
e.printStackTrace();
}
}
}
执行BankDemo.java
程序:
![](https://img.haomeiwen.com/i10118224/7e30dd34b8c0681a.png)
可以看到正确显示异常错误。
网友评论