JavaでCSVファイルに変換する際の文字コードに指定について
JavaでGUIプログラミングをし、作成したウィンドウから入力内容をCSVファイルにするというものです。
プログラム上部はGUIについてです。下の方にActionEventについてコードしているのでそこを見ていただけたらと思います。
java
1 2import java.io.BufferedWriter; 3import java.io.File; 4import java.io.FileOutputStream; 5import java.io.FileWriter; 6import java.io.OutputStreamWriter; 7 8import javafx.application.Application; 9import javafx.event.ActionEvent; 10import javafx.event.EventHandler; 11import javafx.geometry.Insets; 12import javafx.geometry.Pos; 13import javafx.scene.Scene; 14import javafx.scene.control.Button; 15import javafx.scene.control.Label; 16import javafx.scene.control.RadioButton; 17import javafx.scene.control.TextField; 18import javafx.scene.control.ToggleGroup; 19import javafx.scene.layout.BorderPane; 20import javafx.scene.layout.HBox; 21import javafx.scene.layout.VBox; 22import javafx.scene.text.Font; 23import javafx.scene.text.FontWeight; 24import javafx.stage.FileChooser; 25import javafx.stage.Stage; 26 27public class GenerateInfo extends Application{ 28 private Label lb1,lb2,lb3,lb4,lb5,lb6,lb7; 29 private Button[] bt; 30 private TextField tf1,tf2,tf3,tf4,tf5,tf6; 31 private RadioButton[] rb; 32 private ToggleGroup tg; 33 private BorderPane bp; 34 private HBox hb1,hb2,hb3,hb4,hb5,hb6,hb7; 35 private VBox vb; 36 37 public static void main(String[] args) { 38 launch(args); 39 } 40 public void start(Stage stage)throws Exception{ 41 //Title 42 lb1=new Label("Fill in Information"); 43 lb1.setFont(Font.font("Century",FontWeight.BOLD,24)); 44 45 //Name 46 lb2=new Label("Name:"); 47 tf1=new TextField(); 48 hb1=new HBox(); 49 hb1.getChildren().addAll(lb2,tf1); 50 hb1.setPadding(new Insets(0,0,5,0)); 51 hb1.setAlignment(Pos.CENTER_RIGHT); 52 53 //Email 54 lb3=new Label("Email:"); 55 tf2=new TextField(); 56 hb2=new HBox(); 57 hb2.getChildren().addAll(lb3,tf2); 58 hb2.setPadding(new Insets(0,0,5,0)); 59 hb2.setAlignment(Pos.CENTER_RIGHT); 60 61 //RadioButton 62 rb=new RadioButton[2]; 63 rb[0]=new RadioButton("Male"); 64 rb[1]=new RadioButton("Female"); 65 tg=new ToggleGroup(); 66 for(int i=0;i<rb.length;i++) { 67 rb[i].setToggleGroup(tg); 68 //rb[i].setOnAction(new Event()); 69 } 70 hb3=new HBox(); 71 hb3.getChildren().addAll(rb[0],rb[1]); 72 hb3.setPadding(new Insets(0,0,5,60)); 73 hb3.setAlignment(Pos.CENTER); 74 hb3.setSpacing(30); 75 76 //Address 77 lb4=new Label("Address:"); 78 tf3=new TextField(); 79 hb4=new HBox(); 80 hb4.getChildren().addAll(lb4,tf3); 81 hb4.setPadding(new Insets(0,0,5,0)); 82 hb4.setAlignment(Pos.CENTER_RIGHT); 83 84 //Organization 85 lb5=new Label("Organization:"); 86 tf4=new TextField(); 87 hb5=new HBox(); 88 hb5.getChildren().addAll(lb5,tf4); 89 hb5.setPadding(new Insets(0,0,5,0)); 90 hb5.setAlignment(Pos.CENTER_RIGHT); 91 92 //Student ID & Age 93 lb6=new Label("Student ID:"); 94 lb7=new Label("Age:"); 95 tf5=new TextField(); 96 tf6=new TextField(); 97 tf5.setMaxWidth(100); 98 tf6.setMaxWidth(30); 99 hb6=new HBox(); 100 hb6.getChildren().addAll(lb6,tf5,lb7,tf6); 101 hb6.setPadding(new Insets(0,0,5,0)); 102 hb6.setAlignment(Pos.CENTER_RIGHT); 103 104 //Button 105 bt=new Button[2]; 106 bt[0]=new Button("Clear"); 107 bt[1]=new Button("Generate"); 108 hb7=new HBox(); 109 for(int i=0;i<bt.length;i++) { 110 hb7.getChildren().add(bt[i]); 111 bt[i].setOnAction(new ButtonEventHandler()); 112 } 113 hb7.setAlignment(Pos.CENTER); 114 hb7.setPadding(new Insets(0,0,5,30)); 115 hb7.setSpacing(30); 116 117 118 //GUI Display 119 bp=new BorderPane(); 120 vb=new VBox(); 121 vb.setPadding(new Insets(0,60,0,0)); 122 vb.getChildren().addAll(hb1,hb2,hb3,hb4,hb5,hb6,hb7); 123 bp.setTop(lb1); 124 bp.setCenter(vb); 125 126 bp.setAlignment(lb1, Pos.CENTER); 127 bp.setAlignment(vb, Pos.CENTER_RIGHT); 128 129 Scene sc=new Scene(bp,350,300); 130 stage.setScene(sc); 131 stage.setTitle("generateInfo"); 132 stage.show(); 133 134 } 135 class ButtonEventHandler implements EventHandler<ActionEvent>{ 136 public void handle(ActionEvent e) { 137 if(e.getSource().equals(bt[0])) { 138 //clear 139 tf1.setText(""); 140 tf2.setText(""); 141 tf3.setText(""); 142 tf4.setText(""); 143 tf5.setText(""); 144 tf6.setText(""); 145 } 146 if(e.getSource().equals(bt[1])) { 147 //generate 148 FileChooser fc=new FileChooser(); 149 fc.setInitialDirectory(new File("./MyfileEx")); 150 FileChooser.ExtensionFilter extensionFilter= 151 new FileChooser.ExtensionFilter("csv file", "*.csv"); 152 fc.getExtensionFilters().add(extensionFilter); 153 File flw=fc.showSaveDialog(new Stage()); 154 try { 155 BufferedWriter bw=new BufferedWriter(new FileWriter(flw)); 156 FileOutputStream out=new FileOutputStream(flw);番号リスト 157 OutputStreamWriter osw=new OutputStreamWriter(out,"UTF-8"); 158 bw=new BufferedWriter(osw); 159 //ヘッダ 160 bw.append("Name,Email,Gender,Address,Organization,Student ID,Age"); 161 bw.newLine(); 162 //書き出し 163 String info=""; 164 info=info+tf1.getText()+",";//名前 165 info=info+tf2.getText()+",";//Email 166 if(rb[0].isSelected()) {//性別 167 info+="Male,"; 168 }else { 169 info+="Female,"; 170 } 171 info=info+tf3.getText()+",";//住所 172 info=info+tf4.getText()+",";//所属 173 info=info+tf5.getText()+",";//学籍番号 174 info=info+tf6.getText();//年齢 175 System.out.println(info); 176 bw.append(info); 177 bw.close(); 178 }catch(Exception ex) { 179 ex.printStackTrace(); 180 } 181 } 182 } 183 } 184}
実行し入力内容をもとにCSVファイルを出力します。
そしてCSVファイルを開きますが、
このように文字化けしてしまっています。
回答2件
あなたの回答
tips
プレビュー