出一些比较常用的File方法:
1. String getName():返回该File对象所表示的文件名或者路劲名. 2. String getPath():返回该File对象所对应的绝对路劲名的字符串. 3. boolean renameTo(File newNmae):重命名为newName,成功?true. 4. boolean exists():判断File对应的文件或目录是否存在. 5. long lastMoidified():返回文件最后一次修改时间. 6. long length():返回文件长度.
7. boolean createNewFile():当此对象不存在时,该方法新建一个File对象所指
定的新文件,成功?true.(isFile?文件)
8. boolean mkdir():当目录不存在时,该方法新建一个目录.(isDirectory?目录) 9. boolean delete():删除File对象所对应的文件或者目录.
输入流:只能从中读取数据,而不能向其写数据.(Cilent端读取Server的数据)主要有InputStream(字节流)和Reader(字符流)作为基类.
输出流:只能向其写数据,而不能从中读取数据.(内存的内容写进硬盘),只要有OutputSteam(字节流)和Writer(字符流)作为基类.
字节流和字符流方法几乎一样,只是一个单位是字节,一个是字符,导致类型不相同.
InputStream和Reader的方法(都是抽象类,实现读取文件的类分别是FileInputSteam和FileReader):
1. int read():从输入流中读取单个字节/字符,返回所读取的字节/字符数据
(这两种数据都是可以转换成int类型的).
2. int read(byte[] b/char[] cbuf):从输入流中最多读取b/cbuf.length长度的字
节,并存储在数组中,返回实际读取的字节/字符数.
3. int read(byte[] b/char[] cbuf,int off,int len):最多读取len个,从数组的offset
索引开始放,返回实际读取的自己/字符数. OutputStream和Writer也非常类似:
1. void write(int c):将指定字节/字符输出到输出流中.
2. void void(byte[]/char[] buf,int off,int len):将数组从offset开始长度为len输
出到输出流中.
3. void(String str,int off,int len):将字符串从offset开始长度为len的字符输出
到指定输出流中.
如果要输出文本内容,应该包装成PrintStream对象后进行输出,方法创建OutputStream或者Writer对象后,比如是fos,然后用PrintStream ps = new PrintStream(fos)来生成ps对象,系统的标准输出System.out类型就是PrintStream.
访问文件:File+…,访问数组Byte/Char+Array…访问字符串String+…
十、2016.05.14
Scanner sc = new Scanner(System.in);
PrintStream ps = new PrintStream(\); sc.useDelimiter(\); while(sc.hasNext()) {
ps.println(sc.next()); }
这段程序就可以将键盘输入写入到文件.
先对类实现序列化接口然后就可以写入文件,无须实现任何方法,只需要声明就可以了,比如Person implements java.io.serializable,然后就可以用ObjectOutputStream oos = new ObjectOutputStream(new
FileOutputStream());然后就可以用oos.write(obj)把对象写入文件,然后用ObjectInputStream的readObject()可以将对象读取.
线程概述:单线程的程序只有一个顺序执行流,多线程则可以同时进行多个执行.
并发性(concurrency)和并行性(parallel)是两个概念,并行指在同一时刻多条指令在处理器上同时执行,并发指在同一时刻只能执行一条语句,但是多个进程指令被轮换快速执行,造成宏观上的同时进行效果.
通过Thread类来创建子类然后重写run方法,然后创建子类的实例,用线程的start方法来启动线程.用Thread.currentThread().getName()可以获取当前线程名称.
还有用接口Runnable来实现多线程,这个接口要用Thread(target,name)来创建新线程,并且创建的线程是共享一个target,这两种多线程实现方法的主要差别:
1. 实现Runnable接口的类还可以继承其他类. 2. Runnable可以共享一个target.
3. 实际上所有的线程实现几乎都是采用第一种也就是Runnable方法实现.(TestRunnable.java)
控制线程的方法:
1. join()方法,在某个程序执行流中调用其他线程的join()方法,调用线程将被
阻塞,知道被join()方法加入的线程执行完成为止.(JoinThread.java) 2. 后台线程:如果前台线程都死亡,那么后台线程会自动死亡.调用Thread对
象的setDaemon(true)方法可以将指定线程设置为后台线程.(DaemonThread.java) dt.setDaemon(true);
dt.start();要先set然后再start.
3. 线程睡眠:通过用sleep()方法让当前正在执行的线程暂停一段时间,并进
入阻塞状态.
4. 线程让步:yield()方法,通常用sleep()代替yield方法.
线程安全问题:(Account.java DrawThread.java TestDraw.java).
解决线程安全方法:synchronize(obj) {//同步代码块 }也可以用来修饰方法,使他编程线程安全的.
Lock同步锁:在实现线程安全中,通常使用ReentrantLock(可重入锁).使用Lock对象的代码如下图:
Java网络编程:
IP是四个8位二进制数组成,每8位可以转换成一个0~255的十进制整数,因此通常我们看到的IP地址是192.168.1.1
java为网络支持提供了java.net包,该包下的URL和URLConnection等类提供了访问WEB的功能.URLDecoder和URLEncoder则提供了普通字符串和application/x-www-for-urlencoded MIME字符串相互转换的静态方法.
使用InetAddress(代表IP地址):
1. getByName(String host):根据主机获得对应的InentAddress对象. 2. getByAddress(byte[] addr):根据原始IP来获取对应的InetAddress对象. 3. String getCanonicalHostName():获取IP的全限定域名.
4. String getHostAddress():返回InetAddress实例对应的IP地址字符串. 5. String getHostName():返回IP地址的主机名.