DataOutputStream.write(int b)不写

时间:2014-01-10 00:28:15

标签: java file-io dataoutputstream

我正在eclipse中编写一个java程序,它以文件作为输入,并按照一些逻辑编写一个新文件作为输出。

我使用datainputstream作为输入文件,使用dataoutputstream作为输出文件。 我使用那些适用于readln()方法的方法。

现在我的write()方法有问题,只是它没有写任何东西! 我已尝试输入randomAccess和/或输出的bufferedoutputstream。

我尝试了一个单独的java项目:

public static void main (String[] args){

    File output = new File("MyOutputDirectoryHere");

    try{
        DataOutputStream  dos = new DataOutputStream(new     BufferedOutputStream(new FileOutputStream (output)));
        for(int i=0; i<1000; i++){
            dos.write(i);
        }
        dos.close();
    }
    catch (IOException e){
        System.err.println(e);
    }   
}

它完美无缺

但在这个混乱中:

import java.io.*;
import javax.swing.*;

public class apri_file {        
@SuppressWarnings("deprecation")
public static void main(String[] args){
    File inputFile = null;
    File outputFile = null;
    String dati;
    int dato;

    try {
        JFileChooser FileWindow = new JFileChooser();
        FileWindow.isDirectorySelectionEnabled();

        FileWindow.setApproveButtonText("Open IPL File");
        if(FileWindow.showOpenDialog(null) == JFileChooser.APPROVE_OPTION){
            inputFile = FileWindow.getSelectedFile();
            System.out.println("input path: " + inputFile.getAbsolutePath());
        }

        DataInputStream in = new DataInputStream( new BufferedInputStream( new FileInputStream(inputFile)));
        System.out.println("input buffer reader created");
        /**************************/

        FileWindow.setApproveButtonText("Save PLY FIle");
        if(FileWindow.showSaveDialog(null) == JFileChooser.APPROVE_OPTION){
            outputFile = new File (FileWindow.getSelectedFile(),"");
            System.out.println("output path: " + outputFile.getAbsolutePath());
        }

        DataOutputStream  out = new DataOutputStream(new BufferedOutputStream(new FileOutputStream (outputFile)));
        /**************************/

        /*
         * to do write header
         */
        for(int i=0;i<inputFile.length();i++){
            dati = in.readLine();
            if(dati == null){
                break;
            }
            if(dati == "vnod"){
                while(in.read() != 0X65){
                    dato = in.read();
                    if(dato == 0X09 || dato == 0X0D || dato == 0X2C){   }
                    else if(dato == 0X2E) out.write(0X2C);                      
                    else out.write(dato);
                }
            }
            if(dati == "link"){
                int virgola = 0;
                dato = in.read();
                while(dato != 0X65){
                    if(virgola < 4){
                        if(dato == 0X2C) virgola++;
                        if(dato == 0X09 || dato == 0X0D){}
                        else out.write(dato);
                    }
                    else{
                        while(dato != 0X0D) {
                            dato = in.read();
                        }
                        virgola = 0;
                        out.write(0X0D);//nl
                        out.write(0X34);//4
                        out.write(0X20);//space
                    }
                    dato = in.read();

                }//while link
                end = true;
            }//if link
        }//while file

                    //testing the write() method
        for(int i=0; i<1000; i++){
            out.write(0X2C); //tricky part! this output will be always written!! WTF!
        }
        in.close();
        out.close();

        JOptionPane.showMessageDialog(null, "Done!", "Done!" , JOptionPane.INFORMATION_MESSAGE);            
    }
    catch (IOException e){
        System.out.println(e + "\n");
    }
}
}
在上面的代码中,write(int b)方法中的

不会在桌面上的输出文件中写入任何内容,除了最后编码的for循环...代码部分工作正常...

我不知道该怎么做。请帮忙。

2 个答案:

答案 0 :(得分:1)

在java中,您无法使用==比较字符串。您必须使用equals()

if (dati.equals("vnod")) ...

==只是比较相等的引用(如指针),而不是它的引用内容。

另见here

答案 1 :(得分:0)

您应该关闭finally块中的所有流。显然,这里没有关闭输出流。