美文网首页我爱编程
Java初级笔记No.2(更新中)

Java初级笔记No.2(更新中)

作者: wenmingxing | 来源:发表于2018-07-26 14:24 被阅读56次
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、从控制台读取字符串
从标准输入读取字符串需要使用BufferedReaderreadLine()方法。

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、读写文件

读写文件操作使用的两个重要流是:FileInputStreamFileOutputStream

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);

下面是一个演示InputStreamOutputStream用法的例子:

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");
        }
    }
}

删除目录或文件
删除文件可以使用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();
    }
}
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();
    }
}

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{
  // 程序代码
}

声明自定义异常

下面是一个完整的自定义异常实例(一个银行账户的模拟,通过银行卡号完成识别,进行存钱取钱的操作):

/*自定义异常类  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程序:

可以看到正确显示异常错误。

相关文章

网友评论

    本文标题:Java初级笔记No.2(更新中)

    本文链接:https://www.haomeiwen.com/subject/qfrbmftx.html