0

我正在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 循环......这部分代码运行良好......

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

4

2 回答 2

1

在 java 中,不能使用==. 你必须使用equals()

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

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

另请参见此处

于 2014-01-10T01:18:30.143 回答
0

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

于 2014-01-10T00:57:43.010 回答