http://blog.sina.com.cn/s/blog_64909ff90100mebe.html
位流
InputStream和OutputStream
- import
java.io.IOException; -
- public
class Systemin { -
-
public static void main(String args[]) { -
try { -
System.out.println("输入字符:"); -
System.out.println("输入字符十进制表示:" + System.in.read()); -
} catch (IOException e) { -
e.printStackTrace(); -
} -
} - }
执行结果
输入字符: A
输入字符十进制表示: 65
字符A输入后由标准输入流in读取,A的位表示以十进制来看就是65,这是A字符的编码(查查ASCII编码表就知道了)。
一般来说,很少直接实现InputStream或OutputStream上的方法,因为这些方法比较低级,通常会实现它们的子类。这些子类上所定义的方法在进行输入/输出时更为方便
FileInputStream和FileOutputStream
- import
java.io.File; - import
java.io.FileInputStream; - import
java.io.FileNotFoundException; - import
java.io.FileOutputStream; - import
java.io.IOException; -
- public
class FileStreamDemo { -
-
-
public static void main(String[] args) { -
// TODO Auto-generated method stub -
-
try { -
byte[] buffer = new byte[1024]; -
// 源文件 -
FileInputStream fileInputStream = new FileInputStream(new File( -
args[0])); -
FileOutputStream fileOutputStream = new FileOutputStream(new File( -
args[1])); -
-
// avilable()可取得未读取数据的长度 -
System.out.println("复制文件:" + fileInputStream.available() + "字节"); -
-
while (true) { -
if (fileInputStream.available() < 1024) { -
// 剩于的数据比1024少 -
// 一位一位读出再写入目的文件 -
int remain = -1; -
while ((remain = fileInputStream.read()) != -1) { -
fileOutputStream.write(remain); -
} -
break; -
} else { -
// 从来源文件读取数据至缓冲区 -
fileInputStream.read(buffer); -
// 将数组数据写入目的文件 -
fileOutputStream.write(buffer); -
} -
} -
// 关闭流 -
fileInputStream.close(); -
fileOutputStream.close(); -
System.out.println("复制完成"); -
} catch (FileNotFoundException e) { -
e.printStackTrace(); -
} catch (IOException e) { -
// TODO Auto-generated catch block -
e.printStackTrace(); -
} -
} - }
- //
来源文件 - FileInputStream
fileInputStream = -
new FileInputStream(args[0]); - //
目的文件 - FileOutputStream
fileOutputStream = -
new FileOutputStream(args[1]);
BufferedInputStream和BufferedOutputStream