模块 java.base
软件包 java.lang
Class System
java.lang.Object
java.lang.System
public final class System extends Object
System类包含几个有用的类字段和方法。 它无法实例化。 System类提供的设施包括标准输入,标准输出和错误输出流; 访问外部定义的属性和环境变量; 加载文件和库的方法; 以及用于快速复制阵列的一部分的实用方法。
static PrintStream err “标准”错误输出流。
static InputStream in “标准”输入流。
static PrintStream out “标准”输出流。
从键盘输入数据到文件例子
/**
* 键盘输入数据到文件中;
* 输出到文件用到两种方式: 1.一行一行输出.readLine();
* 2.一个一个输出.read();
*/
public static void main(String[] args) {
BufferedWriter bufferedWriter = null;
BufferedReader bufferedReader = null;
try {
//新建的输出(内存输出到文件),不能放到循环里面,否则会一直循环创建新的文件.
//选择流(输入还是输出),这里是字符流(字节流)
FileWriter fileWriter = new FileWriter("Test921复制文件.txt");
//选择了一个对应的处理流,使流不会阻塞(勉强理解,不然有时候好像会写不进去要调用flush())
bufferedWriter = new BufferedWriter(fileWriter);
//循环键盘输入
while (true) {
//从键盘输入(键盘输入到内存),System.in
InputStreamReader inputStreamReader = new InputStreamReader(System.in);
bufferedReader = new BufferedReader(inputStreamReader);
//读一行字符串
//方式一;使用读取一行的.readLine();
// String s = bufferedReader.readLine();
// if ("esc".equals(s)) {
// break;
// }else bufferedWriter.write(s + '\n');//手动加换行
//方式二:使用一个一个读取的.read(chars);
char[] chars = new char[1024];
int len;
len = bufferedReader.read(chars);
//需要将chars转化为string类型的输出,再与给定的值比较
//且数组大小很大,只输入esc不一定输出的值就是esc(123esc),需要判断是否包含
if (String.copyValueOf(chars).contains("esc")) {
//需要手动停止程序,最后才会有数据进入文件
break;
}else bufferedWriter.write(chars,0,len);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (bufferedWriter != null) {
try {
bufferedWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
if (bufferedReader != null) {
try {
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
附加:System.out:System.setOut()的使用
很方便,使用System.setOut()可以不使用输出的Filewriter等,直接输出到文件,不用新建输出流
/**
* System.out:System.setOut()的使用
*
*/
@Test
public void test5() throws IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream("Test921.txt"),"gbk"));
String s ;
//PrintStream out = System.out;//这一行与下面的System.setOut(out);对应
//加这一行就是直接是输出到控制台,后面的所有System.out.println都是输出到对应的文件里
System.setOut(new PrintStream("Test920.txt"));
/**
* 这一行取消注释就是取消输出到文件,与PrintStream out = System.out配合使用
* 1.需要先保存标准的输出流,2.再调System.setOut(out),才会继续输出到控制台
* 如果不保存,之后的所有System.out都会默认为new PrintStream("Test920.txt")
* 直接System.setOut(System.out);是不行的
*/
//System.setOut(out);
// 读取文件内容,基本相当于System.setIn()
// 如果需要键盘输入,就直接标准的System.In,需要文件输入就如同最前面的
// BufferedReader bufferedReader;既需要键盘又需要文件时只需用
// InputStream in = System.in;
// System.setIn(in);解除标准输入
while ((s = bufferedReader.readLine())!= null){
System.out.println(s + '\t');
}
bufferedReader.close();
}
附加:键盘输入和文件输入同时使用,使用System.setIn()
使用System.setIn()不能转换编码,有时候似乎不方便
public static void main(String[] args) throws Exception {
BufferedWriter bufferedWriter = null;
BufferedReader bufferedReader = null;
bufferedWriter = new BufferedWriter(new FileWriter("Test921复制文件.txt"));
//这里是键盘输入 循环键盘输入
while (true) {
bufferedReader = new BufferedReader(new InputStreamReader(System.in));
char[] chars = new char[1024];
int len;
len = bufferedReader.read(chars);
if (String.copyValueOf(chars).contains("esc")) {
break;
} else bufferedWriter.write(chars, 0, len);
//方式二;使用读取一行的.readLine();
// String s = bufferedReader.readLine();
// if ("esc".equals(s)) {
// break;
// }else bufferedWriter.write(s + '\n');//手动加换行
}
//这里开始读取文件,不使用键盘输入
//方式一:不使用System.setIn()
bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream("Test921.txt"), "gbk"));
String s;
System.setOut(new PrintStream("Test920.txt"));
while ((s = bufferedReader.readLine()) != null) {
System.out.println(s + '\t');
}
//方式二:使用System.setIn(fileInputStream);
//缺点;出现乱码好像没法,因为不能选择编码,例如我现在这个是gbk的不是utf-8的会乱码
// FileInputStream fileInputStream = new FileInputStream("Test921.txt");
// System.setIn(fileInputStream);
// System.setOut(new PrintStream("Test920.txt"));
// byte[] bytes = new byte[1024];
// int len;
// while ((len = fileInputStream.read(bytes)) != -1){
// //string的构造器将byte数组转化为string
// System.out.println(new String(bytes));
// }
bufferedReader.close();
bufferedWriter.close();
}