</pre><p><span style="font-family:SimSun;font-size:14px;line-height:26px; white-space:pre;"> ---------<a target=_blank target="_blank" href="http://www.itheima.com/" rel="nofollow" style="color:rgb(202,0,0); text-decoration:none; text-indent:28px">JavaEE培训、java培训、</a>java学习型技术博客、期待与您交流!</span>------------<span style="font-family:Arial;font-size:14px;line-height:26px; white-space:pre"> </span></p><p><span style="font-size:14px;"><span style="font-family:Arial;"> 黑马程序员学习基础笔记</span></span><span style="font-family:Arial;font-size:14px;line-height:26px; white-space:pre"></span><span style="white-space:pre"></span></p><p></p><p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px; font-family:Arial; font-size:14px; line-height:26px" align="center"><span style="white-space:pre"></span></p><div>Runtime篇:</div><p> 之前看IO流时没发现老师讲到Runtime,只知道RuntimeException是运行时异常。现在听毕老师讲到Runtime,跟重新学一遍一样。</p><p> 现在的Runtime在Java中属于一个类,该类没有构造器。一般没有构造器时,不让外面随意创建对象,我们会想到里面肯定会有静态方法。但是在查看API时发现Runtime类中竟然还有非静态方法,这说明该类一定提供了创建对象的静态方法,而且返回值还是Runtime类型的。</p><p> 这也是说明Runtime类使用了单例的设计模式。该方法是static Runtime getRuntime();</p><p></p><p> <pre name="code" class="html"> public class RuntimeDemo{
public static void main(String[] args){
Runtime runtimes = Runtime.getRuntime(); //创建Runtime对象
//其中exec()可以执行任何程序
Process p = runtimes.exec("notepad.exe SystemDemo.java"); //这相当于选中记事本上的打开,并找到SystemDemo.java这个文件一样,但是最好使用文本
}
}
其中Process类很强大,其中destory()可以销毁一个进程。
java.util.Date类篇:
import java.util.*;
import java.text.*;
class DateDemo
{
public static void main(String[] args)
{
Date d = new Date();
System.out.println(d); //这里的时间格式不是常见的可以按照我们自己指定的格式转换
//SimpleDate是Date的参考类,不过它是个抽象类,创建不了对象,所以只能用它的子类来创建对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日E hh:mm:ss");
//这时调用format方法可以令时间变成我们想要的格式
String time = sdf.format(d);
System.out.println(time);
}
}
IO流篇:
IO流(数据流)主要处理设备之间的数据传输,设备比如硬盘上存放的文件
对数据的操作通过流的方式,操作流的对象都在IO包里
流按流向分为:输入流、输出流
流按操作数据分为:字节流、字符流
字符流的由来:为何单独分离字符流,字符流的对象里面融合了编码表(一般采用默认字符编码),如果不融合编码表,可能不同的计算机所设置的编码表不一样,这样同一个程序或者文字在读出来时会出现异常。字符流是基于字节流产生的。
常用的基类(都是抽象的)
抽象基类 | 输入 | 输出 |
字节流 | InputStream | OutputStream |
字符流 | Reader | Writer |
IO流命名有规律可循,后缀名是父类名,前缀名是该对象的功能名称。
FileWriter、FileReader类用于操作文件的Writer子类对象。
提示:
1.如果在fileWriter的对象中直接使用 对象.write("字符串");这里面的内容不是写到写前面创建的文件中,而是直接写到流当中,不会在文件的内容中显示出来这就需要刷新流对象中的缓冲中的数据。格式为:对象.flush();
即就是将字符串写入到流中后,需要将数据刷到目的地中。
对象.write("字符串"); 对象.flush();
2.关闭流之前也会刷新。在关闭之后调用流中的方法会出现异常
读取有两种方式:
方式一:一次读一个字符,程序会自动往下读
while(true){
int ch = fr.read();
if(ch == -1){
break;
}
System.out.println(ch);
}
方式二:通过字符数组进行读取
package atziji.io.test1;
import java.io.FileReader;
import java.io.IOException;
public class FileReaderDemo2 {
public static void main(String[] args) throws IOException{
FileReader fr = new FileReader("demo.txt");
//定义一个字符数组,用于存储读到字符。
//该read(char[])返回的是读到字符个数
char[] buf = new char[3];
int num = 0;
while((num = fr.read(buf)) != -1){
System.out.print(new String(buf,0,num));//这里的print是为了将所有数据都按照原来文件的格式打印出来。如果这里写成println会变成前面char[n]的字节读完后,就会换行,这时不能保证输出的格式是原来文件的格式。
}
}
}
复制文件的原理:
其实就是将C盘下的文件数据存储到D盘指定的文件。
步骤:1.在D盘创建一个文件,用于存储C盘文件中的数据。
2.定义读取流和C盘文件关联。
3.通过不断的读写完成数据存储。
4.关闭资源。
package atziji.io.test1;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class CopyTest {
public static void main(String[] args) {
FileWriter fw = null;
FileReader fr = null;
try {
// 文件写入
fw = new FileWriter("www.txt");
// 文件读取
fr = new FileReader("nnn.txt");
char[] array = new char[1024];
int len = 0;
while ((len = fr.read(array)) != -1) {
fw.write(array, 0, len);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
throw new RuntimeException("读取文件失败!");
} finally {
// 不论读取正确与否,最后都是要关闭资源,因为IO流属于稀缺资源
if (fr != null) {
try {
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fw != null) {
try {
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}