io的用法

各位大神能写一个简单的io输入, 输出吗?
小弟是菜鸟没写过想找个参考参考!

//写入代码 str写入文件的数据 file文件
private static boolean write(String str, File file) {
FileOutputStream fo = null;
try {
if(!file.getParentFile().exists())
file.getParentFile().mkdirs();
if (!file.exists())
file.createNewFile();
if (str == null)
str = "";
fo = new FileOutputStream(file.getPath(), false);
str += "\r\n";
OutputStreamWriter osw = new OutputStreamWriter(fo, "UTF-8");
osw.write(str);
osw.flush();
return true;
} catch (Exception e) {
log.error(e.getMessage(),e);
return false;
} finally {
if (fo != null)
try {
fo.close();
} catch (IOException e1) {
log.error(e1.getMessage(),e1);
}
}
}

[code="java"]
1、按字节读取文件内容
2、按字符读取文件内容
3、按行读取文件内容
4、随机读取文件内容
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.RandomAccessFile;
import java.io.Reader;
public class ReadFromFile {
/**

  • 以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。
  • @param fileName 文件的名 / public static void readFileByBytes(String fileName){ File file = new File(fileName); InputStream in = null; try { System.out.println("以字节为单位读取文件内容,一次读一个字节:"); // 一次读一个字节 in = new FileInputStream(file); int tempbyte; while((tempbyte=in.read()) != -1){ System.out.write(tempbyte); } in.close(); } catch (IOException e) { e.printStackTrace(); return; } try { System.out.println("以字节为单位读取文件内容,一次读多个字节:"); //一次读多个字节 byte[] tempbytes = new byte[100]; int byteread = 0; in = new FileInputStream(fileName); ReadFromFile.showAvailableBytes(in); //读入多个字节到字节数组中,byteread为一次读入的字节数 while ((byteread = in.read(tempbytes)) != -1){ System.out.write(tempbytes, 0, byteread); } } catch (Exception e1) { e1.printStackTrace(); } finally { if (in != null){ try { in.close(); } catch (IOException e1) { } } } } /*
  • 以字符为单位读取文件,常用于读文本,数字等类型的文件
  • @param fileName 文件名
    */
    public static void readFileByChars(String fileName){
    File file = new File(fileName);
    Reader reader = null;
    try {
    System.out.println("以字符为单位读取文件内容,一次读一个字节:");
    // 一次读一个字符
    reader = new InputStreamReader(new FileInputStream(file));
    int tempchar;
    while ((tempchar = reader.read()) != -1){
    //对于windows下,/r/n这两个字符在一起时,表示一个换行。
    //但如果这两个字符分开显示时,会换两次行。
    //因此,屏蔽掉/r,或者屏蔽/n。否则,将会多出很多空行。
    if (((char)tempchar) != '/r'){
    System.out.print((char)tempchar);
    }
    }
    reader.close();
    } catch (Exception e) {
    e.printStackTrace();
    }
    try {
    System.out.println("以字符为单位读取文件内容,一次读多个字节:");
    //一次读多个字符
    char[] tempchars = new char[30];
    int charread = 0;
    reader = new InputStreamReader(new FileInputStream(fileName));
    //读入多个字符到字符数组中,charread为一次读取字符数
    while ((charread = reader.read(tempchars))!=-1){
    //同样屏蔽掉/r不显示
    if ((charread == tempchars.length)&&(tempchars[tempchars.length-1] != '/r')){
    System.out.print(tempchars);
    }else{
    for (int i=0; i<charread; i++){
    if(tempchars[i] == '/r'){
    continue;
    }else{
    System.out.print(tempchars[i]);
    }
    }
    }
    }

    } catch (Exception e1) {
    e1.printStackTrace();
    }finally {
    if (reader != null){
    try {
    reader.close();
    } catch (IOException e1) {
    }
    }
    }
    }
    /**

  • 以行为单位读取文件,常用于读面向行的格式化文件

  • @param fileName 文件名
    /
    public static void readFileByLines(String fileName){
    File file = new File(fileName);
    BufferedReader reader = null;
    try {
    System.out.println("以行为单位读取文件内容,一次读一整行:");
    reader = new BufferedReader(new FileReader(file));
    String tempString = null;
    int line = 1;
    //一次读入一行,直到读入null为文件结束
    while ((tempString = reader.readLine()) != null){
    //显示行号
    System.out.println("line " + line + ": " + tempString);
    line++;
    }
    reader.close();
    } catch (IOException e) {
    e.printStackTrace();
    } finally {
    if (reader != null){
    try {
    reader.close();
    } catch (IOException e1) {
    }
    }
    }
    }
    /
    *

  • 随机读取文件内容

  • @param fileName 文件名
    /
    public static void readFileByRandomAccess(String fileName){
    RandomAccessFile randomFile = null;
    try {
    System.out.println("随机读取一段文件内容:");
    // 打开一个随机访问文件流,按只读方式
    randomFile = new RandomAccessFile(fileName, "r");
    // 文件长度,字节数
    long fileLength = randomFile.length();
    // 读文件的起始位置
    int beginIndex = (fileLength > 4) ? 4 : 0;
    //将读文件的开始位置移到beginIndex位置。
    randomFile.seek(beginIndex);
    byte[] bytes = new byte[10];
    int byteread = 0;
    //一次读10个字节,如果文件内容不足10个字节,则读剩下的字节。
    //将一次读取的字节数赋给byteread
    while ((byteread = randomFile.read(bytes)) != -1){
    System.out.write(bytes, 0, byteread);
    }
    } catch (IOException e){
    e.printStackTrace();
    } finally {
    if (randomFile != null){
    try {
    randomFile.close();
    } catch (IOException e1) {
    }
    }
    }
    }
    /
    *

  • 显示输入流中还剩的字节数

  • @param in
    */
    private static void showAvailableBytes(InputStream in){
    try {
    System.out.println("当前字节输入流中的字节数为:" + in.available());
    } catch (IOException e) {
    e.printStackTrace();
    }
    }

public static void main(String[] args) {
String fileName = "C:/temp/newTemp.txt";
ReadFromFile.readFileByBytes(fileName);
ReadFromFile.readFileByChars(fileName);
ReadFromFile.readFileByLines(fileName);
ReadFromFile.readFileByRandomAccess(fileName);
}
}
[/code]

java.io包含四个基类,并且分为两种流:
字符流:Reader, Writer
字节流:InputStream, OutputStream
用来操作文件的读写都是基于上面四个基类,比如:
FileReader 和 FileWriter
如果要用到缓存,则再加上BufferedReader 和BufferedWriter
具体例子见lihao312同学的回复,已经非常详细了。

补充一个讲解Java读文件的链接:
http://www.importnew.com/11537.html

package FileIO0523;

/**

  • 不可以拷贝文件夹,图片 ,只可以 拷贝字符流 */

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

/**

  • 在一个方法中完成文件的复制

  • @author Administrator

  • */

    public class copyinputoutput02 {

    public static void main(String[] args) {

    //源文件的地址  
    String path1 ="C:\\Users\\Administrator\\Desktop\\文件操作.rar";  
    //copy的地址  
    String path2 = "F:\\file1\\文件操作.rar";  
    
    File file1 = new File(path1);  
    File file2 = new File(path2);  
    copy02(file1,file2);  
    System.out.println("拷贝完成");  
    

    }

    public static void copy02(File file1,File file2){

    try{  
        //读  
        FileInputStream fis= new FileInputStream(file1);  
        //创建输入缓冲流  
        BufferedInputStream bis = new BufferedInputStream(fis);  
        //根据读到文件的大小来创建数组  
        byte[] by = new byte[(int) (file1.length())];  
        //读取  
        bis.read(by);  
        //关闭流  
        fis.close();  
    
        //写  
        FileOutputStream fos = new FileOutputStream(file2);  
        //创建输出缓冲流  
        BufferedOutputStream bos = new BufferedOutputStream(fos);  
        //直接写保存在数组中的数据  
        bos.write(by);  
        //强制写出来  
        bos.flush();  
        //关闭流空间  
        fos.close();  
    
    }catch(Exception e){  
        e.printStackTrace();  
    }  
    

    }

}