Day59.标准输入、输出流、打印流、数据流 -Java常用类、集合、IO#
程序员文章站
2024-03-04 23:11:42
...
标准输入、输出流
/*
1. 标准的输入、输出流
1.1
System.in: 标准的输入流,默认从键盘输入
System.out: 标准的输出流,默认从控制台输出
1.2
System类的setIn(InputStream is) / setOut(PrintStream ps)方式重新指定输入输出的流。
1.3练习:
从键盘输入字符串,要求将读取到的整行字符串转成大写输出。然后继续进行输入操作,直到当输入"e"或者"exit"时,退出程序。
方法一: 使用Scanner实现,调用next()返回一个字符串
方法二: 使用System.in实现。 System.in ---> 转换流 ---> BufferedReader的readline()
*/
public static void main(String[] args) {
BufferedReader br = null;
try {
InputStreamReader isr = new InputStreamReader(System.in);
br = new BufferedReader(isr);
while (true) {
System.out.println("请输入字符串:");
String str = br.readLine();
if ("e".equalsIgnoreCase(str) || "exit".equalsIgnoreCase(str)) {
System.out.println("系统退出");
System.exit(0);
} else {
String s = str.toUpperCase();
System.out.println(s);
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
.
练习
练习
public class MyInput {
// Read a string from the keyboard
public static String readString() {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// Declare and initialize the string
String string = "";
// Get the string from the keyboard
try {
string = br.readLine();
} catch (IOException ex) {
System.out.println(ex);
}
// Return the string obtained from the keyboard
return string;
}
// Read an int value from the keyboard
public static int readInt() {
return Integer.parseInt(readString());
}
// Read a double value from the keyboard
public static double readDouble() {
return Double.parseDouble(readString());
}
// Read a byte value from the keyboard
public static double readByte() {
return Byte.parseByte(readString());
}
// Read a short value from the keyboard
public static double readShort() {
return Short.parseShort(readString());
}
// Read a long value from the keyboard
public static double readLong() {
return Long.parseLong(readString());
}
// Read a float value from the keyboard
public static double readFloat() {
return Float.parseFloat(readString());
}
}
.
打印流
/*
2. 打印流: PrintStream和PrintWriter
2.1 提供了一系列重载的print() 和 println()
*/
@Test
public void test2() {
PrintStream ps = null;
try{
FileOutputStream fos = new FileOutputStream(new File("D:\\test\\test3.txt"));
//创建打印输出流,设置为自动刷新模式(写入换行符或字符 '\n'时都会刷新输出缓冲区)
ps= new PrintStream(fos,true);
if (ps!= null){//把标准输出流(控制台输出)改成文件
System.setOut(ps);
}
for (int i = 0; i <255 ; i++) {//输出ASCII字符
System.out.print((char)i);
if (i%5==0 ){//每50个数据一行
System.out.println();
}
}
}catch (FileNotFoundException e){
e.printStackTrace();
}finally{
if (ps != null){
ps.close();
}
}
}
.
数据流
/*
3. 数据流
3.1 DateInputStream 和 DateOutputStream
3.2 用于读取或写出基本数据类型的变量或字符串
练习: 将内存中的字符串、基本数据类型的变量写出到文件中。
*/
//数据的写入
@Test
public void test3(){
//1.
DataOutputStream dos = null;
try {
dos = new DataOutputStream(new FileOutputStream("date.txt"));
//2.
dos.writeUTF("阿昌");
dos.flush();//刷新操作,将内存中的数据写入文件
dos.writeInt(21);
dos.flush();
dos.writeBoolean(true);
dos.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
//3.
if (dos!= null){
try {
dos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/*
将文件中存储的基本数据类型和字符串读取到内存中,保存在变量中。
注意点:读取不同类型数据的顺序要按照当初写入的顺序保持一致。
*/
//数据的读取
@Test
public void test4(){
DataInputStream dis = null;
try {
//1.
dis = new DataInputStream(new FileInputStream("date.txt"));
//2.
String name = dis.readUTF();
int age = dis.readInt();
boolean isMale = dis.readBoolean();
System.out.println("name="+name);
System.out.println("age="+age);
System.out.println("isMale="+isMale);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (dis != null){
//3.
try {
dis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}