我一直在尝试使用writeObject方法导出但是如果我在调用ObjectOutputStream()方法时直接在输出中直接写出我想要的文件的名称(或路径),我只实现了导出txt。 我想要的是调用我创建的方法,询问用户他想要的文件的名称,然后我将它连接到它应该找到的路径的其余部分,但它不起作用。
这就是我想要使用的:
ObjectOutputStream fpsalida = new ObjectOutputStream(new FileOutputStream(nombreArchivo()));
这是使其成功的唯一方法:
ObjectOutputStream fpsalida = new ObjectOutputStream(new FileOutputStream("NameOfTheFileOrCompletePath.txt"));
但是我总是在执行时收到catch块的消息:
当我执行程序并尝试导出数据时,我得到了catch块的消息:
/*nombreArchivo is the String with the String returned by nombreArchivo.
与编写FileOutputStream(nombreArchivo()))相同; * / 尝试{ ObjectOutputStream fpsalida = new ObjectOutputStream(new FileOutputStream(nombreArchivo)); // SERIA EL ARG NOMBREARCHIVO
fpsalida.writeObject(listaprod); //Hay que pasarle el return de la lista de prod.CREAR LA FUNC RETORNAPROD
System.out.println("\nExportado!\n");
}catch (IOException e){
System.out.println("No se ha podido exportar!\n");
}
return;
}
这是我们感兴趣的nombreArchivo方法的一部分:
System.out.println("\nWrite the name of the file you want: ");
archivoSalida += sc.nextLine() + ".txt";
System.out.println("==============================================\n");
//archivoSalida is defined as a String
return archivoSalida;
}
谢谢。
答案 0 :(得分:1)
问题的原因是该文件夹之前没有创建。我认为该方法如果该目录不存在,则会创建它。
答案 1 :(得分:0)
由于您在对文件名进行硬编码时没有收到IOException,因此问题是nombreArchivo()返回的字符串的实际内容。
要调试问题的特定性质,请将返回的字符串分配给变量,然后记录它,或者在System.err上将其打印出来,这样您就可以看到它的真实含义:
String fileName = nombreArchivo();
System.err.println("str = \"" + str + \"");
ObjectOutputStream fpsalida = new ObjectOutputStream(new FileOutputStream(fileName));
当您查看错误流时,问题可能会很明显。您还应该考虑在catch块中记录或打印出异常的堆栈跟踪:
}catch (IOException e){
e.printStackTrace();
System.out.println("No se ha podido exportar!\n");
}
我怀疑fileName是null,空字符串(""),或者违反操作系统的文件名限制(例如)包含非法字符,例如换行符。
更新:根据您的评论,问题可能在于FileOutputStream如何计算文件路径。请尝试这样做,确保从nombreArchivo()返回的字符串只是文件的名称,没有目录路径:
String fileName = nombreArchivo();
String filePath = "file://" + System.getProperty("user.home"); //* You may need to verify that file:// isn't already included in the user's home directory
URL url = new URL(filePath);
File directory = new File(url.toURI());
ObjectOutputStream fpsalida = new ObjectOutputStream(new
FileOutputStream(new File(directory, fileName)));
说明:我从艰难的学校学到了这个技巧。文件路径的计算方式存在细微之处,这是我通过平台无关的方式实现的一种方式。
答案 2 :(得分:0)
函数ObjectOutputStream
似乎确实返回了不正确的路径,因为您正在硬编码路径。我认为您的硬编码路径也是错误的,但需要查看确切的错误消息才能告诉。
我测试了import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;
public class SandBox {
// get absolute path from relative
public static String getPath(String relativePath){
return "/home/mack" + relativePath;
}
public static void main(String [] args){
System.out.println("Write the name of the file you want: ");
//extract filename from user
String filename = new Scanner(System.in).nextLine() + ".txt";
try {
ObjectOutputStream stream = new ObjectOutputStream(new FileOutputStream(SandBox.getPath("/" + filename)));
//write integer to stream
stream.writeInt(12345);
stream.close();
} catch (IOException ex) {
Logger.getLogger(SandBox.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
的这个示例,似乎工作正常。
var query = Order.find({
date : {
$lt : End,
$gt : Start
}}, {cust_ID:1, wholeseller_ID:1}
);