Java输入输出
流(Stream)
- 输入流表示从一个源读取数据,输出流表示向一个目标写数据。
Java.io
包中的流支持多种格式,如基本类型、对象、本地化字符集
读取输入
Java的控制台输入使用System.in
BufferedReader
可以把System.in
包装在一个BufferedReader
对象中来创建一个字符流。
BufferedReader br=new BufferedReader(new InputSteamReader(System.in));
BufferedReader
对象创建之后,可以使用reader()
从控制台读取一个字符,可以使用readline()
读取一个字符串
Scanner
构造一个Scanner
对象,与System.in
关联
import java.util.*;
Scanner in = new Scanner(System.in);
String str=in.nextline();
String word=in.next();//读取一个单词(以空白符为分隔符)
int number=in.nextInt();//读取一个整数
double floatingNumber=in.nextDouble();//读取一个浮点数
控制台读取多字符输入
import java.io.*;
public class BRRead{
public static void main(String[] args) throws IOException{
char c;
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
System.out.println("输入字符,按下'q'退出");
//读取字符
do{
c=(char)br.read();
System.out.println(c);
}while(c!='q');
}
}
从控制台读取字符串
import java.io.*;
public class BRReadLines{
public static void main(String[] args)throw IOException{
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"));
}
}
格式化输出
使用printf()
进行格式化输出。
转换符 | 类型 |
---|---|
d | 十进制整数 |
x | 十六进制整数 |
o | 八进制整数 |
f | 定点浮点数 |
e | 指数浮点数 |
s | 字符串 |
c | 字符 |
b | 布尔值 |
% | 百分号% |
文件输入输出
- 描述输入流和输出流的类层次图
FileInputStream
- 从文件读取数据,它的对象可以用
new
创建。 - 可以使用字符串类型的文件名来创建一个输入流对象来读取文件。
InputStream f=new FileInputStream("C:/java/hello");
- 也可以使用一个文件对象来创建一个输入流对象读取文件。
File f=new File("C:/java/hello");
InputStrem out=new FileInputStream(f);
FileOutputStream
- 创建一个文件并向文件中写数据。
如果该流在打开文件进行输出前,目标文件不存在,则该流会创建该文件。 - 使用字符串类型的文件名创建一个输出流对象
Outputstream f = new FileOutputStream("C:/java/hello");
- 使用一个文件对象来创建一个输出流来写文件
File f= new File("C:/java/hello");
OutputStream f=new FileOutputStream(f);
示例代码
import java.io.*;
public class fileStreamTest{
public static void main(String[] agrs){
File f=new File("a.txt");
FileOutputStream fop=new FileOutputStream(f);//文件不存在会自动新建
OutputStremWriter writer=new OutputStreamWriter(fop,"UTF-8");//构建OutputSreamWriter对象,参数可以指定编码,默认为操作系统默认编码,windows为gbk
writer.append("中文输入");//写入缓冲区
writer.append("\r\n");//写入缓冲区
writer.append("English");//写入缓冲区
writer.close();//关闭写入流,同时把缓冲区内容写入文件
fop.close();//关闭输出流,释放系统资源
FileInputStream fip=new FileInputStream(f);
InputStreamReader reader=new InputStreamReader(fip,"UTF-8");
StringBuffer sb=new StringBuffer();
while(reader.ready()){
sb.append((char)reader.read());//转成char加到String Buffer对象中
}
System.out.println(sb.toString());
reader.close();//关闭读取流
fip.close();//关闭输入流,释放系统资源
}
}
Java中的目录
创建目录
mkdir()
创建一个文件夹。失败表明File对象指定的路径已经存在,或由于整个路径还不存在,该文件夹不能被创建。mkdirs()
创建一个文件夹和它所有的父文件夹。
import java.io.File;
public class CreateDir(){
public void create(){
String dirname="/tmp/user/java/bin";
File d=new File(dirname);
d.mkdirs();
}
}
读取目录
*使用list()
提取它包含的文件和文件夹的列表。
import java.io.File;
public class DirList{
public static void main(String[] args){
String dirname="/tmp";
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]+"是一个目录");
else
System.out.println(s[i]+"是一个文件");
}
}else
System.out.println(dirname+"不是一个目录");
}
}
删除目录
使用java.io.File.delete()
Scanner
next()
与nextLine()
区别
next()
* 一定要读取到有效字符后才可以结束
* 对输入有效前遇到的空白,next()
会将其自动去掉
* 只有输入有效字符后才将后面输入的空白作为分隔符或结束符
* 不能得到带有空格的字符串
nextLine()
* 以Enter
为结束符,即返回的是输入回车符之前所有的字符
* 可以获得空白
输入数字类型
输入之前先使用hasNextXXX()
验证,再使用nextXXX()
读取
import java.util.Scanner;
public class ScannerDemo(){
public static void main(String[] agrs){
Scanner scan=new Scanner(System.in);
int i=0;
float f=0.0f;
System.out.println("输入整数:");
if(scan.hasNextInt()){//判断输入的是否为整数
i=scan.nextInt();
System.out.println("整数数据为:"+i);
}else
System.out.println("输入的不是整数");
}
}