大家看看我输出的2结果代表的是什么意思我看不出来。。
比方说你想把一个文件里的东西复制到另一个文件里,首先你要在2个文件之间建立一个管道,就是那个流对象,而且2个文件也要换成流对象
比如复制1.txt里面内容到2.txt里,你要先 File in=new File("1.txt");File out=new File("2.txt");//把2个文件弄成流对象
然后再 FileinputStream file=new FileinputStream(in)//意思是建立一个管道,同时和文件1.txt相通了。
当调用 file.read()方法时,我不知道file.read方法到底干了什么,返回的又是什么,查API说 (从此输入流中读取一个数据字节。如果没有输入可用,则此方法将阻塞。返回值是 下一个数据字节;如果已到达文件末尾,则返回 -1。)我不明白什么意思,不如说1.txt里数据是 111 调用file.read方法时,读取一个数据字节,一个数据字节是不是就是1个1(也就是4个字节),返回值是下一个数据字节,下一个数据是1,转换为int型还是1,但是我试了下返回值是49,我很困惑。
希望大大们能给我个明示啊,看我哪个地方理解错误
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; /** 
 * 
 * @author 1 
 */ 
public class Main {     /** 
     * @param args the command line arguments 
     */ 
    public static void main(String[] args) throws FileNotFoundException, IOException { 
        File f=new File("d:/1.txt"); 
        FileInputStream  in=new FileInputStream(f);  
        byte[] b=new byte[12]; 
        
        System.out.print(b+"  ");
        int d=in.read(b);
        System.out.print(d);
        File f1=new File("d:/2.txt"); 
        FileOutputStream file=new FileOutputStream(f1); 
        file.write(b); 
//        in.close(); 
//        file.close(); 
        // TODO code application logic here 
    } } 

解决方案 »

  1.   

    一个简单的例子,楼主参考一下,共同学习!import java.io.*;
    import javax.swing.*;public class Main { /**
     * 一些文件操作
     * @param inFilePath 读入的文件名
     * @param outFilePath 写入的文件名
     * @param append 是否附加在尾部
     */
    public void doSomething(String inFilePath,String outFilePath,boolean append){
    File fileIn = new File(inFilePath);
    File fileOut = new File(outFilePath);
    try {
    FileInputStream fis = new FileInputStream(fileIn);
    FileOutputStream fos = new FileOutputStream(fileOut,append);
    byte[] b = new byte[1]; // 1个byte数组
    while((fis.read(b)) != -1){ // 一个个的读字节
    fos.write(b); // 一个个的写到输出流中
    }
    fos.close();
    fis.close();
    new JOptionPane().showMessageDialog(null, "操作完成!");
    } catch (FileNotFoundException fnfe) {
    fnfe.printStackTrace();
    } catch(IOException ioe){
    ioe.printStackTrace();
    }

    }

    /**
     * 选择打开文件
     * @param title
     * @return
     */
    public String chooseFileOpen(String title){
    JFileChooser chooser = new JFileChooser();
    chooser.setDialogTitle(title);
    int i = chooser.showOpenDialog(null);
    if(i == JFileChooser.APPROVE_OPTION){
    return chooser.getSelectedFile().getAbsolutePath();
    }
    else{
    return "";
    }
    } /**
     * 设置保存文件
     * @param title
     * @return
     */
    public String chooseFileSave(String title){
    JFileChooser chooser = new JFileChooser();
    chooser.setDialogTitle(title);
    int i = chooser.showSaveDialog(null);
    if(i == JFileChooser.APPROVE_OPTION){
    return chooser.getSelectedFile().getAbsolutePath();
    }
    else{
    return "";
    }
    }
    public static void main(String[] args) {
    // new Main().doSomething("D:/1.txt", "D:/2.txt", false);
    Main test = new Main();
    test.doSomething(test.chooseFileOpen("选择文件"),test.chooseFileSave("保存文件"), true);
    }
    }
      

  2.   

    这里偷懒了,不过实际中,流最好套在BufferedInputStream, BufferedOutputStream中,这样操作更为优化
      

  3.   


    恩用buffer读写操作速度更快