system:不能被实例化类(说明里面的是静态成员),描述系统的相关信息
out:标准输出,默认是控制台
in: 标准输入,默认是键盘
获取/设置系统属性信息,Properties getProperties()/setProperties()
//因为Properties是maptable的子类,也就是map集合的子类对像。
可以在jvm启动时可以动态加载一些属性信息:在doc中 java -D 键值 文件
Runtime:每个 Java 应用程序都有一个
Runtime
类实例,使应用程序能够与其运行的环境相连接。
可以通过
getRuntime
方法获取当前对象。
eg : Runtime r = Runtime.getRuntime();
Process p = r.exec("qq.exe");
p.destory();
Date :日期 Calendar
重点:IO流
1. 字符流基于字节流
2. OI的类名特点是:流的功能_流的父类名
3. 创建一个FileWriter对象,该对象一被初始化就必须要明确被操作的对象。
而且该文件会在指定目录下,如果该目录下有同名文件将会被覆盖。
其实该步骤就是在明确数据要存放的目的地。
FileWriter file = new FileWriter("c:\demo.txt");
file.write("aaaa");
fw.flush();
//关闭流资源,但是关闭之前会刷新缓冲区的数据到目的地中。
//和flush的区别在于flush刷新,流还可以继续使用。close将会关闭流。
fw.close();
4. IO流异常处理
package
xyxysjxy.io;
import
java.io.FileWriter;
import
java.io.IOException;
public
class
IOExceptionTest {
public
static
void
main(String[] args) {
FileWriter fw =
null
;
try
{
//并且在已有的文件的末尾处进行数据续写.
fw =
new
FileWriter(
"demo.txt",true
);
//window中换行需要\r\n,而linux是\n
fw.write(
"qwerr\r\n"
);
}
catch
(IOException e) {
e.printStackTrace();
}
finally
{
try
{
if
(fw !=
null
)
fw.close();
}
catch
(IOException e) {
e.printStackTrace();
}
}
}
}
6. 文件的读
//创建一个文件读取流对象,和指定名称的文件相关联。
//要保证该文件是已经存在的,如果不存在就会抛出FileNotFoundException
FileReader fr = new FileReader("demo.txt");
两种方式:
1. 一个接着一个的读取单个字符:
fr =
new
FileReader(
"f:\\demo.txt"
);
fr.read();
int
num= 0;
while
((num= fr.read()) != -1)
System.
out
.println((
char
)num);
2.把数据读入到一个字符组中去
fr =
new
FileReader(
"f:\\demo.txt"
);
int
num= 0;
char
[] arr =
new
char
[1024];
//读到最后或者所给的缓冲区装不下了就会返回读的数目,
//但是假如读到了文件最后的还读的话就返回-1。
//假如文件没有读完而是缓冲区不够空间的话再读就会覆盖缓冲区的已存在的字符数据
while
((num= fr.read(arr)) != -1)
// 分配一个新的 String,它包含取自字符数组参数一个子数组的字符。
System.
out
.println(
new
String(arr, 0,num));
7. 拷贝文本文件中数据到某一个目录下的文件中
package
xyxysjxy.io;
import
java.io.FileReader;
import
java.io.FileWriter;
import
java.io.IOException;
public
class
FileCopy {
public
static
void
main(String[] args) {
copy_1();
}
public
static
void
copy_1() {
FileReader fr =
null
;
FileWriter fw =
null
;
try
{
fr =
new
FileReader(
"f:\\copyfrom.txt"
);
fw =
new
FileWriter(
"f:\\copyto.txt"
);
// 单个字符的读取
//intc = 0;
// while ((c = fr.read()) != -1) {
// fw.write(c);
// }
char
[] arr =
new
char
[1024];
int
len = 0;
while
((len = fr.read(arr)) != -1) {
fw.write(arr, 0, len);
}
System.
out
.println(
"已经写完了!!!!!"
);
}
catch
(IOException e) {
throw
new
RuntimeException();
}
finally
{
if
(fw !=
null
)
try
{
fw.close();
}
catch
(IOException e) {
e.printStackTrace();
}
finally
{
if
(fr !=
null
)
try
{
fr.close();
}
catch
(IOException e) {
e.printStackTrace();
}
}
}
}
}
public
static
void
testBufferReaderWriter() {
FileReader fr =
null
;
BufferedReader br =
null
;
FileWriter fw =
null
;
BufferedWriter bw =
null
;
try
{
// 创建一个字符输出输入流流对象
fr =
new
FileReader(
"f:\\bufferwriter.txt"
);
fw =
new
FileWriter(
"f:\\bufferwriterreader.txt"
);
// 为了提高字符输出效率,加入一个缓冲技术
// 只要将需要被提高效率的流对象作为参数传递给缓冲区的构造函数即可
br =
new
BufferedReader(fr);
bw =
new
BufferedWriter(fw);
String s =
null
;
// 在读数据的时候并不会把行终结符一起读取,
// 缓冲区提供了读取一行的方法readLine();读到了末尾返回null
while
((s = br.readLine()) !=
null
) {
bw.write(s);
// 缓冲区提供了一个跨平台的换行符 newLine()
bw.newLine();
// 记住:只要用到了缓冲区,就要记得刷新
bw.flush();
}
System.
out
.println(
"通过缓冲区成功写入数据"
);
}
catch
(IOException e) {
throw
new
RuntimeException(
"没有写成功!!"
);
}
finally
{
try
{
if
(br !=
null
)
br.close();
}
catch
(IOException e) {
e.printStackTrace();
}
finally
{
if
(bw !=
null
)
try
{
bw.close();
}
catch
(IOException e) {
e.printStackTrace();
}
}
}
// 通过源码,你会发现其实
bufferreader
也是通过fileReader的read
// 方法一个一个字符的读数据,只是在里面定义了一个字符数组来作为缓冲的效果
class
MyBufferReader {
private
FileReader
fr
;
public
MyBufferReader(FileReader fr) {
this
.
fr
= fr;
}
public
String myReaderLine()
throws
IOException {
StringBuilder sb =
new
StringBuilder();
int
c = 0;
while
((c =
fr
.read()) != -1) {
if
(c ==
'\r'
)
continue
;
if
(c ==
'\n'
)
return
sb.toString();
sb.append((
char
)c);
}
if
(sb.length() != 0)
//默认toString()转换的是空字符不是null
sb.toString();
return
null
;
}
public
void
close()
throws
IOException {
fr
.close();
}
}