🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

2回答

1207閲覧

readメソッドが使えない原因と改善策が知りたいです

nakagen

総合スコア24

JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

1グッド

0クリップ

投稿2021/01/26 07:51

前提・実現したいこと

テキストフィールドに書いた実数値をファイルとして保存して読み込みたいのですが、readメソッドでエラーが起きてしまいます。どなたか使えない原因と改善策を教えて頂けませんでしょうか?

発生している問題・エラーメッセージ

75と77行目のreadメソッドでエラーが発生しています。

Exception in thread "JavaFX Application Thread" java.lang.Error: Unresolved compilation problems: 型 FilterInputStream のメソッド read(byte[]) は引数 (int) に適用できません 型 FilterInputStream のメソッド read(byte[]) は引数 (int) に適用できません at kadai.sixteen$SampleEventHandler.handle(sixteen.java:75) at kadai.sixteen$SampleEventHandler.handle(sixteen.java:1) at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86) at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49) at javafx.event.Event.fireEvent(Event.java:198) at javafx.scene.Node.fireEvent(Node.java:8411) at javafx.scene.control.Button.fire(Button.java:185) at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:182) at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:96) at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:89) at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218) at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80) at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54) at javafx.event.Event.fireEvent(Event.java:198) at javafx.scene.Scene$MouseHandler.process(Scene.java:3757) at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485) at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762) at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494) at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:394) at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295) at java.security.AccessController.doPrivileged(Native Method) at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$353(GlassViewEventHandler.java:432) at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389) at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:431) at com.sun.glass.ui.View.handleMouseEvent(View.java:555) at com.sun.glass.ui.View.notifyMouse(View.java:937) at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) at com.sun.glass.ui.win.WinApplication.lambda$null$147(WinApplication.java:177) at java.lang.Thread.run(Thread.java:748)

該当のソースコード

package kadai; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import javafx.application.Application; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.TextField; import javafx.scene.layout.BorderPane; import javafx.scene.layout.HBox; import javafx.stage.FileChooser; import javafx.stage.Stage; public class sixteen extends Application{ private Label lb; private TextField tf[] = new TextField[7]; private Button bt1,bt2; public static void main(String[]args) { launch(args); } public void start(Stage stage)throws Exception{ lb = new Label("実数を入力してください"); bt1 = new Button("読込"); bt2 = new Button("保存"); for(int i = 0;i<tf.length;i++) { String num = (Double.valueOf(i).toString()); tf[i] = new TextField(num); } BorderPane bp = new BorderPane(); HBox hb1 = new HBox(); for(int i = 0;i<tf.length;i++) { hb1.getChildren().add(tf[i]); } HBox hb2 = new HBox(); hb2.getChildren().add(bt1); hb2.getChildren().add(bt2); bp.setTop(lb); bp.setCenter(hb1); bp.setBottom(hb2); bt2.setOnAction(new SampleEventHandler()); bt1.setOnAction(new SampleEventHandler()); Scene sc = new Scene(bp,400,400); stage.setScene(sc); stage.setTitle("サンプル"); stage.show(); } class SampleEventHandler implements EventHandler<ActionEvent>{ public void handle(ActionEvent e) { FileChooser fc = new FileChooser(); fc.getExtensionFilters().add(new FileChooser.ExtensionFilter("バイナリファイル","*.bin")); if(e.getSource() == bt1) { try {File flo = fc.showOpenDialog(new Stage()); if(flo != null) { BufferedInputStream bis = new BufferedInputStream(new FileInputStream(flo)); for(int i = 0;i<tf.length;i++) { double num = Double.parseDouble(tf[i].getText()); int num1 = (int) num; bis.read(num1); int num2 = (int)((num-num1)*1000); bis.read(num2); tf[i].setText(Double.valueOf(num2).toString()); } bis.close(); } } catch(Exception ex) { ex.printStackTrace(); } }else if(e.getSource() == bt2) { try { File fls = fc.showSaveDialog(new Stage()); if(fls != null) { BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(fls)); for(int i = 0;i<tf.length;i++) { double num = Double.parseDouble(tf[i].getText()); int num1 = (int) num; bos.write(num1); int num2 = (int)((num-num1)*1000); bos.write(num2); } bos.close(); } } catch(Exception ex){ ex.printStackTrace(); } } } } }

試したこと

調べたところ、readメソッドは整数値しか使えないので、整数値を1000倍にすることを試しました。

補足情報(FW/ツールのバージョンなど)

jdk14

TN8001👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

DataInputStream (Java Platform SE 8 )
DataOutputStream (Java Platform SE 8 )

こちらを使ったらどうですか?
専用のメソッドがあるので、byte[]がどうのこうのと考えずに済みます。


質問と関係ない点ですが、

Java

1File flo = fc.showOpenDialog(new Stage());

これではモーダルになっていません(開くダイアログが出ている間にも、元のウィンドウをいじれてしまう)

Java

1Node node = (Node) e.getSource(); 2Window window = node.getScene().getWindow(); 3File flo = fc.showOpenDialog(window);

このようにする必要があります。showSaveDialogも同様です。

投稿2021/01/28 21:14

編集2021/01/28 21:35
TN8001

総合スコア9855

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nakagen

2021/01/29 02:00

ご回答ありがとうございます!少し試してみます!
nakagen

2021/01/29 11:20

すみません、表示がどうしてもできなかったので、少し文を教えて頂くことは可能でしょうか・・・?
TN8001

2021/01/29 11:37

BufferedInputStreamの代わりに、DataInputStreamにします。 double d = bis.readDouble(); で読み込みます。 BufferedOutputStreamの代わりに、DataOutputStreamにします。 bos.writeDouble(num); で書き込みます。 これだけですが、今どうなっているんですか?
nakagen

2021/01/29 11:51

こういう感じで大丈夫でしょうか・・・? try { Node node = (Node) e.getSource(); Window window = node.getScene().getWindow(); File flo = fc.showOpenDialog(window); if(flo != null) { DataInputStream bis = new DataInputStream(new FileInputStream(flo)); for(int i = 0;i<tf.length;i++) { double num = Double.parseDouble(tf[i].getText()); num = bis.readDouble(); tf[i].setText((Double.valueOf(num)).toString());; } bis.close(); } } catch(Exception ex) { ex.printStackTrace(); } }else if(e.getSource() == bt2) { try { Node node = (Node) e.getSource(); Window window = node.getScene().getWindow(); File fls = fc.showOpenDialog(window); if(fls != null) { DataOutputStream bos = new DataOutputStream(new FileOutputStream(fls)); for(int i = 0;i<tf.length;i++) { double num = Double.parseDouble(tf[i].getText()); bos.writeDouble(num); } bos.close(); } } catch(Exception ex){ ex.printStackTrace(); } }
nakagen

2021/01/29 11:53

すみません、 保存の部分を double num = Double.parseDouble(tf[i].getText()); int num1 = (int) num; bos.write(num1); int num2 = (int)((num-num1)*1000); bos.write(num2); と言う形にしたときの読み込みのコードについても教えて頂ければ幸いです・・・ 重ね重ねすみません
TN8001

2021/01/29 12:07

@nakagen 2021/01/29 20:51 まあおおむねいいと思いますけど、動かせば一目瞭然ですよね? @nakagen 2021/01/29 20:53 何を聞きたいのかがわかりませんが、intを保存したいならreadInt・writeIntしたらいいんじゃないですか? DataStreamとBufferedStreamをちゃんぽんで使おうという話ですか?(何のために??
nakagen

2021/01/29 12:16

すみません、興味本心で聞きました・・・
nakagen

2021/02/04 15:13 編集

お久しぶりです すみませんが、javaのことで聞きたいことがあるのですが、いくつか質問をさせて頂くことは可能でしょうか・・・? 烏滸がましいようですが、よろしくお願いします・・・
TN8001

2021/02/04 16:52

JavaやJavaFXはMyタグにしているので、nakagenさんが新たに質問されているのは気づいています。 しかし宿題代行をする気はさらさらありません(誰のためにもならないでしょう?) 回答がついても放置や「答えを教えてください」のようなコメントでは、回答者もやる気がなくなってしまいます。 「調べました」だけでは何も伝わりません。 「わかりません」も、「だから質問してるんだよね?」としか言えないです。 見たurlや分かってる所・わからない所等を書いていただかないと、ゼロからは説明はできません。 はじめはだれでも初心者なので、わからないことを責めているわけではありません。 わかろうとしているのが質問から伝わらないのです。 もしも答えだけが欲しいと思っているのであれば、teratailはそういうサイトではありません。
nakagen

2021/02/05 03:52

なるほどです・・・、今後から調べてから質問していきます・・・
guest

0

型 FilterInputStream のメソッド read(byte[]) は引数 (int) に適用できません

readメソッドは、byteの配列を引数にとりますが、コードではint変数が引数になってしまっている、というエラーです

ここらへんどうにかしましょう

投稿2021/01/26 08:06

編集2021/01/26 08:07
y_waiwai

総合スコア88038

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nakagen

2021/01/26 08:13

つまり、intからbyteに変換するか、readとはまた別のメソッドを使用することになるのでしょうか…?
nakagen

2021/01/26 08:15

また、教科書を参考にして作成したのですが ーーーーー try {File flo = fc.showOpenDialog(new Stage()); if(flo != null) { BufferedInputStream bis = new BufferedInputStream(new FileInputStream(flo)); for(int i = 0;i<tf.length;i++) { int num = bis.read(); tf[i].setText(Integer.valueOf(num).toString()); } bis.close(); } } catch(Exception ex) { ex.printStackTrace(); } ーーーーー ここのreadは、エラーが起きなかったのですが何故でしょうか…?
y_waiwai

2021/01/26 08:16

byteの配列で読み込んで、そのデータをint型に変換すればいいです
y_waiwai

2021/01/26 08:16

あなたの提示したコードとよく見比べましょう。
nakagen

2021/01/26 08:21

もしかして String num = (Double.valueOf(i).toString()); tf[i] = new TextField(num); のところをdoubleにしてしまったのが原因でしょうか?
y_waiwai

2021/01/26 08:28

エラーが出てるのはreadメソッドですよ
nakagen

2021/01/26 08:47

すみませんでした、少し書き直してみたのですが… for(int i = 0;i<tf.length;i++) { double num = Double.parseDouble(tf[i].getText()); int num1 = (int) num; num1 = bis.read(); int num2 = (int)((num-num1)*1000); num2 = bis.read(); tf[i].setText((Double.valueOf(num2)).toString());; } それでも実数値がテキストフィールドに出てきませんでした…
y_waiwai

2021/01/26 09:05

提示のコードでは > bis.read(num1); となってますよ
nakagen

2021/01/28 18:50

すみません、少しいじってしまいました… 何をどうすればいいのか分からず…
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問