我正在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循环...代码部分工作正常...
我不知道该怎么做。请帮忙。
答案 0 :(得分:1)
答案 1 :(得分:0)
您应该关闭finally
块中的所有流。显然,这里没有关闭输出流。