我正在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 循环......这部分代码运行良好......
我不知道该怎么办。请帮忙。