My class MessageはFileのクラスラッパーです。 deserializeしてFileを取得するよりも、Messageをシリアル化してサーバーに送信したい。しかし、私はデシリアライズすると、私はファイル名だけを取得?私は何を間違っているのですか?参照するオブジェクトでフィールドをシリアル化するにはどうすればよいですか?
クラスラッパー:
public class Message implements Serializable{
private int id;
private File file;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}
}
デシリアライズコード:
ObjectInputStream objectInputStream = new ObjectInputStream(in);
Message message = (Message)objectInputStream.readObject();
objectInputStream.close();
String fileText = "";
FileReader fileReader = new FileReader(message.getFile());
BufferedReader br = new BufferedReader(fileReader);
fileText = br.readLine();
私はこれをやろうと、私はFileNotFoundExceptionをを取得します。助けてください。ありがとうございました。
どうやってシリアル化しますか? – pirho
'File'オブジェクトはパス* name *を表し、そのパスを介してアクセス可能なファイルまたはディレクトリの内容は表しません。それはまさにあなたが見るものです。代わりにコンテンツを必要とする場合は、適切な型のフィールド、おそらく 'byte []'、 'char []'、あるいは 'List'を宣言してください。あなたはおそらくどちらか一方だけを望むでしょう。 「ファイル」とコンテンツの両方ではありません。 –
@pirho 'メッセージメッセージ=新しいメッセージ(); System.out.println( "ファイルへのパスを設定:"); String path = scanner.nextLine(); message.setFile(新しいファイル(パス)); message.setId((int)(Math.random()* 10)); ObjectOutputStream objectOutputStream =新しいObjectOutputStream(出力)です。 objectOutputStream.writeObject(message); objectOutputStream.flush(); objectOutputStream.close(); –