文件的IO操作:

字节流:
 输入字节流:
  InputStream 所有输入字节流的基类,抽象类。
  FileInputStream 读取文件的输入字节流。
  BufferedInputStream 缓冲输入字节流。该类的内部就是维护了一个8kb的字节数组,为了提高读取文件效率。
  
 输出字节流:
  OutputStream 所有输出字节流的基类,抽象类。
  FileOutputStream 文件的输出字节流。
  BufferedOutputStream 缓冲输出字节流。该类的内部就是维护了一个8kb的字节数组,为了提高写文件效率。
  
 什么时候使用字节流:
  读取到的数据不需要经过编码或者解码的情况下使用字节流。例:图片数据。
 
字符流:
 字符流 = 字符流 + 编码(解码)
 
 输入字符流:
  Reader 所有输入字符流的基类,抽象类。
  FileReader 读取文件字符的输入字符流
  BufferedReader 扩展功能(readline)维护了一个长度为8192的字符数组;
  
 输出字符流:
  Writer 所有输出字符流的基类,抽象类。
  FileWriter 输出文件字符的输出字符流
  BufferedWriter 缓冲输出字符流扩展功能(newline);
  
 什么时候使用字符流:

  读取到的字节数需要被转换成字符数据,这时候使用字符流;
 
转换流:
 输入字节流的转换流:
  InputStreamReader
 输出字节流的转换流:
  OutputStreamWriter
 转换流的作用;
  1.可以把对应的字节流转换成字符流使用
  2.可以指定码表进行读写文件的数据;
  FileReader, FileWriter这两个类默认使用gbk编码表,不能由你来指定码表读写文件数据。

练习:

package com.java.base;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter; /*
字节流:
输入字节流:
InputStream 所有输入字节流的基类,抽象类。
FileInputStream 读取文件的输入字节流。
BufferedInputStream 缓冲输入字节流。该类的内部就是维护了一个8kb的字节数组,为了提高读取文件效率。 输出字节流:
OutputStream 所有输出字节流的基类,抽象类。
FileOutputStream 文件的输出字节流。
BufferedOutputStream 缓冲输出字节流。该类的内部就是维护了一个8kb的字节数组,为了提高写文件效率。 什么时候使用字节流:
读取到的数据不需要经过编码或者解码的情况下使用字节流。例:图片数据。 字符流:
字符流 = 字符流 + 编码(解码) 输入字符流:
Reader 所有输入字符流的基类,抽象类。
FileReader 读取文件字符的输入字符流
BufferedReader 扩展功能(readline)维护了一个长度为8192的字符数组; 输出字符流:
Writer 所有输出字符流的基类,抽象类。
FileWriter 输出文件字符的输出字符流
BufferedWriter 缓冲输出字符流扩展功能(newline); 什么时候使用字符流:读取到的字节数需要被转换成字符数据,这时候使用字符流; 转换流:
输入字节流的转换流:
InputStreamReader
输出字节流的转换流:
OutputStreamWriter
转换流的作用;
1.可以把对应的字节流转换成字符流使用
2.可以指定码表进行读写文件的数据;
FileReader, FileWriter这两个类默认使用gbk编码表,不能由你来指定码表读写文件数据。 */ public class IoExercise { public static void main(String[] args) throws Exception {
//testInput();
//writeFile();
readFile();
} public static void testInput() throws IOException{
InputStream in = System.in;
//int content = in.read();//每次读到一个字节的数据
//需要把字节流转化成字符流使用
InputStreamReader inputStreamReader = new InputStreamReader(in);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader); System.out.println(bufferedReader.readLine());
} public static void readFile() throws Exception{ //默认的使用gbk编码表,所以读的乱码
// FileReader fileReader = new FileReader("E:\\Test\\a.txt");
// int content = 0;
// while((content = fileReader.read()) != -1){
// System.out.print((char)content);
// }
// fileReader.close(); //建立文件与程序的输入数据通道
FileInputStream fileInputStream = new FileInputStream("E:\\Test\\a.txt");
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "utf-8");
int content = 0;
while((content = inputStreamReader.read()) != -1){
System.out.println((char)content);
}
fileInputStream.close(); } //utf-8把数据写到文件上
public static void writeFile() throws Exception{
//建立文件与程序的数据通道
FileOutputStream fileOutputStream = new FileOutputStream("E:\\Test\\a.txt");
//创建一个输出字节流的转换刘并且指定码表进行写数据
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream,"utf-8");
outputStreamWriter.write("大家好");
//关闭资源
outputStreamWriter.close(); } }

/*
 * 方式一:继承Thread
 *   1.自定义一个类继承Thread。
 *   2.重写Thread的run方法,把自定义线程的任务定义在run方法上。
 *   3.创建Thread子类的对象,并且调用start方法启动另一个线程。
 *
 * 方式二: 实现Runnable接口
 *   1.自定义一个类实现Runnable接口。
 *   2.实现Runnable接口中的run方法,把自定义线程的任务代码定义在run方法内。
 *   3.创建Runnable实现类的对象。
 *   4.创建Thread对象,把Runnable实现类对象作为参数传递。
 *   5.调用Thread对象的start开启线程。
 *
 * 线程安全:
 *   1.同步代码块:
 *    synchronized(锁){
 *     需要同步的代码
 *    }
 *   2.同步函数
 *    修饰符 synchronize 返回值类型 函数名(形参列表。。){
 *    
 *    }
 *   出现的根本原因:
 *    1.必须存在两个或者两个以上的线程共享着一个资源。
 *    2.操作共享资源的代码必须有两句或者两句以上。
 *   
 */

练习:

package com.java.base;

/*
* 方式一:继承Thread
* 1.自定义一个类继承Thread。
* 2.重写Thread的run方法,把自定义线程的任务定义在run方法上。
* 3.创建Thread子类的对象,并且调用start方法启动另一个线程。
*
* 方式二: 实现Runnable接口
* 1.自定义一个类实现Runnable接口。
* 2.实现Runnable接口中的run方法,把自定义线程的任务代码定义在run方法内。
* 3.创建Runnable实现类的对象。
* 4.创建Thread对象,把Runnable实现类对象作为参数传递。
* 5.调用Thread对象的start开启线程。
*
* 线程安全:
* 1.同步代码块:
* synchronized(锁){
* 需要同步的代码
* }
* 2.同步函数
* 修饰符 synchronize 返回值类型 函数名(形参列表。。){
*
* }
* 出现的根本原因:
* 1.必须存在两个或者两个以上的线程共享着一个资源。
* 2.操作共享资源的代码必须有两句或者两句以上。
*
*/
class AnotherThread implements Runnable{ @Override
public void run() {
for(int i = 0; i < 100; i++){
System.out.println(Thread.currentThread().getName() + ": " + i);
}
}
}
class MyThread extends Thread{
public MyThread(String name){
super(name);
}
@Override
public void run() { for(int i = 0; i < 100; i++){
System.out.println(Thread.currentThread().getName() + ": " + i);
} }
}
public class ThreadExercise { public static void main(String[] args) {
MyThread myThread = new MyThread("继承Thread的线程");
myThread.start();
for(int i = 0; i < 100; i++){
System.out.println(Thread.currentThread().getName() + ": " + i);
} AnotherThread anotherThread = new AnotherThread();
Thread thread = new Thread(anotherThread, "实现runnable接口的线程");
thread.start(); } }

欢迎访问handsomecui的blog地址:

http://www.cnblogs.com/handsomecui/

网站:handsomecui.top

Java的IO以及线程练习的更多相关文章

  1. Java并发编程:线程池的使用

    Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了, ...

  2. Java 新IO

       NIO提供全新的底层I/O模型.与最初的java.io包中面向流(stream-oriented)概念不同,NIO采用了面向块的概念(block-oriented).在尽可能的情况下,I/O的操 ...

  3. JAVA中IO技术:BIO、NIO、AIO

    1.同步异步.阻塞非阻塞概念        同步和异步是针对应用程序和内核的交互而言的. 阻塞和非阻塞是针对于进程在访问数据的时候,根据IO操作的就绪状态来采取的不同方式,说白了是一种读取或者写入操作 ...

  4. JAVA的IO学习

    IO 有具体的分类: 有具体的分类:1:根据处理的数类型不同:字节流和字符流.2:根据流向不同:输入流和输出流. =============(补充字节跟字符概念区分)================= ...

  5. 彻底明白Java的IO系统

    java学习:彻底明白Java的IO系统 文章来源:互联网 一. Input和Output1. stream代表的是任何有能力产出数据的数据源,或是任何有能力接收数据的接收源.在Java的IO中,所有 ...

  6. java内存模型与线程(转) good

    java内存模型与线程 参考 http://baike.baidu.com/view/8657411.htm http://developer.51cto.com/art/201309/410971_ ...

  7. Java并发编程:线程池的使用(转)

    Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了, ...

  8. Java语言定义的线程状态分析

    说到线程,一定要谈到线程状态,不同的状态说明线程正处于不同的工作机制下,不同的工作机制下某些动作可能对线程产生不同的影响. Java语言定义了6中状态,而同一时刻,线程有且仅有其中的一种状态.要获取J ...

  9. java多线程系列(六)---线程池原理及其使用

    线程池 前言:如有不正确的地方,还望指正. 目录 认识cpu.核心与线程 java多线程系列(一)之java多线程技能 java多线程系列(二)之对象变量的并发访问 java多线程系列(三)之等待通知 ...

随机推荐

  1. ffmpeg + sdl -03 简单音频播放器实现

    没办法,工作中遇到了问题. 目前NEC EMMA的架构如下: 从USB读入文件 -> 文件分析并提取Packet中的Payload Data   -> NEC HANDLE AVTrans ...

  2. hdu1047(模拟大量的循环添加)

    标题信息:总结多个大整数,(使用add循环相加的功能) http://acm.hdu.edu.cn/showproblem.php? pid=1047 AC代码: /**  *大数的循环加法,转化为字 ...

  3. Codeforces 468B Two Sets 并查集

    题目大意:给出n个数,要求将n个数分配到两个集合中,集合0中的元素x,要求A-x也再0中,同理1集合. 写了几个版本号,一直WA在第8组数据...最后參考下ans,写了并查集过了 学到:1.注意离散的 ...

  4. linux下单独安装oracle12.1客户端

    1.安装oracle-instantclient:(默认安装即可) oracle-instantclient12.1-sqlplus-12.1.0.1.0-1.x86_64.rpmoracle-ins ...

  5. F# 越用越喜欢

    F# 越用越喜欢 最近由于需要,把遗忘了几年的F#又捡了起来.说捡了起来,倒不如说是从头学习,原来学的早已经忘了!所谓学过,只不过看过一本<F# 语言程序设计> (郑宇军 凌海风 编著 - ...

  6. 阿里云Centos7使用yum安装MySQL5.6的正确姿势

    阿里云Centos7使用yum安装MySQL5.6 阿里云Centos7使用yum安装MySQL5.6 前言:由于某些不可抗力,我要在自己的阿里云服务器上搭建hadoop+hive+mysql+tom ...

  7. 关于HTML5中audio标签在手机中的autoplay

    这个问题是我最头疼的: 问题描述:在开发手机网页的时候,苹果和三星的一些浏览器不能自动开始播放 解决办法:在这个页面上弹出一个层来触发audio标签的play()方法,或者你还可以 谷歌一下----& ...

  8. 转载:牛魔王的世界观 »谈谈ie6不支持min-height与max-height的解决方法

    转载网址:http://www.niumowang.org/html-css/ie6-min-height/ 手里的项目还在继续,今天正好遇到了min-height的问题,干脆在这里记录下来.我是喜欢 ...

  9. 元组:戴上了枷锁的列表 - 零基础入门学习Python013

    元组:戴上了枷锁的列表 让编程改变世界 Change the world by program 元组:戴上了枷锁的列表 由于和列表是近亲关系,所以元组和列表在实际使用上是非常相似的. 我们这节课主要通 ...

  10. akoj-1048-求某一整数序列的全排列问题

    求某一整数序列的全排列问题 Time Limit:1000MS  Memory Limit:65536K Total Submit:35 Accepted:16 Description 现有一整数序列 ...