Scanner类
通过Scanner类获取用户的输入。
//创建Scanner对象
Scanner sc = new Scanner(System.in);
方法 | 描述 |
---|---|
hasNext() | 是否还有输入 |
next() | 读取下一个有效字符(此时才会结束输入,并且输入有效字符之前遇到的空格键、tab键、enter键,next()会自动忽视,输入有效字符后,next()才会将后续输入的空格键、tab键、enter键视为分隔符或结束符,因此用next()方法不能得到带空格的字符串) |
hasNextLine() | 是否还有输入 |
nextLine() | 返回enter键之前的所有字符 |
hasNextInt() | nextInt() |
hasNextFloat() | nextFloat() |
hasNextDouble() | nextDouble() |
package com.bj.beans;
import java.util.Scanner;
public class Test{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str;
System.out.println("请按next输入:");
if(sc.hasNext()) {
str = sc.next();
//sc.nextLine();注意若无此句,
System.out.println("next形式:" + str);
}
System.out.println("请按nextln输入:");
if(sc.hasNextLine()) {
str = sc.nextLine();
System.out.println("nextLine形式: " + str);
}
}
}
结果
请按next输入:
qwer
next形式:qwer
请按nextln输入:
nextLine形式:
发现nextLine形式并没有输出,这是为什么呢?
当你输入qwer并且按enter键后,next()方法只把qwer读进去了,并没有把enter键读进去;程序向下进行,输出qwer,然后sc里还有一个enter,sc.hasNextLine()判断为真,此时输出但是并没有什么东西,输出个空字符串。
在此基础上,再试一次:
请按next输入:
qwer df
next形式:qwer
请按nextln输入:
nextLine形式: df
此时应该看得很清楚了。
IO流
PrintStream类 :定义print()、println()方法。
System.out :PrintStream类对象的一个引用。
PrintStream类(实现了write()方法)---------继承---->OutputStream类
IO流:字节流+字符流。
两个比较重要的流:FileInputStream和FileOutputStream,这两个是字节流。
FileInputStream类
该类用来从文件读取数据。
因此,该类的对象(即输入流对象)就是用来读取某个特定的文件,读取的数据放在某处。
- int read()-从输入流(要读取的内容)中读取数据的下一个字节到java程序内部。返回读取字符的ascII值。到达流的末尾返回-1。
- int read(byte[] b)-从输入流(要读取的内容)中读取一定数量的字节,并将它们存储到缓冲区数组b中,返回实际读取的字节数(可能设置的缓冲区的大小没有全部用完)。
FileOutputStream类
该类用来创建一个文件并向文件中写数据。
因此,该类的对象(即输出流对象)就是用来创建某个特定的文件(和某个文件相关联,如"c:/java/hello"),并向这个特定的文件中写入数据(数据来自write()中传入的参数)。
- void write(int w)-把指定的字节写入到输出流中
- void write(byte[] w)-把指定数组中w.length长度的字节写到OutputStream中。
InputStream类的**available()**方法–可以在读写操作前先得知数据流里有多少个字节可以读取。
package binaryheap.test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
public class BH{
public static void main(String[] args) {
try {
//先写入数据,再在控制台输出
File f = new File("a.txt");
OutputStream os = new FileOutputStream(f);
byte[] bt = {1,23,3,5};
for (int i = 0; i < bt.length; i++) {
os.write(bt[i]);
}
os.close();
//inputStream
InputStream is = new FileInputStream(f);
int len = is.available();
for (int i = 0; i < len; i++) {
System.out.print(is.read() + " ");
}
} catch (Exception e) {
// TODO: handle exception
}
}
}
结果
1 23 3 5
但是在文件中显示是乱码。
解决方法:将字节流对象转换为字符流对象。
public class Test2{
public static void main(String[] args){
File f = new File("b.txt");
FileOutputStream fos = new FileOutputStream(f);
//利用字节流对象建立字符流对象
//写出
OutputStreamWriter osw = new OutputStreamWriter(fos,"UTF-8");
osw.append("为民楼喷空ing");
osw.append("\r\n");
osw.append("TxL");
osw.close();
fos.close();
//读取
FileInputStream fis = new FileInputStream(f);
InputStreamReader isr = new InputStreamReader(fis,"UTF-8");
StringBuffer sb = new StringBuffer();
while(isr.ready()){
sb.append((char)isr.read());
}
System.out.println(sb.toString());
isr.close();
fis.close();
}
}
结果
为民楼喷空ing
TxL
文件和IO
关于文件和IO的类:
- File
- FileReader
- FileWriter
创建目录/文件夹
File对象方法:
- mkdir() -成功返回true
- mkdirs() -创建一个文件夹和他的所有父文件夹
package binaryheap.test;
import java.io.*;
public class BH{
public static void main(String[] args){
String dirName = "D:/a/b/c/d/e/f";
File f = new File(dirName);
f.mkdirs();
}
}
目录
一个目录是一个(is a)File对象,包含文件和其他文件夹。
is.Directory()
-返回true。
list()
-提取包含的文件和文件夹的列表。
package binaryheap.test;
import java.io.*;
import java.nio.FloatBuffer;
public class BH{
public static void main(String[] args){
String str2 = "D:/a";
File f = new File(str2);
//查找是否是文件夹
if(f.isDirectory()) {
String[] s = f.list();
for(String si : s) {
String ss = str2 + "/" + si;
File ff = new File(ss);
if(ff.isDirectory()) {
System.out.println(ss + " is a 目录,即将删除");
ff.delete(); //目录下没有其他文件和子目录时才会删除
}else {
System.out.println(ss + " is a 文件");
}
}
}else {
System.out.println(str2 + " is not a 目录");
}
}
}
结果
D:/a/ad.txt is a 文件
D:/a/b is a 目录
D:/a/cd is a 目录
D:/a/dsf is a 目录