回答編集履歴

6

主語を変更!

2018/02/04 05:48

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
 
12
12
 
13
- Javaの`FileOutputStream` closeていないので、プログラム内でファイルを開いた状態です。
13
+ `FileOutputStream` のインスタンス(変数:fos)に対してclose処理を行っていないためJavaプログラム内でファイルを開いた状態です。
14
14
 
15
15
  そのため、`ProcessBuilder`で別プロセスを生成しファイルを開こうとするとアクセスできません。
16
16
 

5

いんでんと!

2018/02/04 05:48

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -60,9 +60,11 @@
60
60
 
61
61
  エラメッセージはキーワード[「プログラム言語名 エラーメッセージ」](https://www.google.co.jp/search?q=java+プロセスはファイルにアクセスできません。別のプロセスが使用中です。)でぐぐると解決内容がヒットすることが多いです。
62
62
 
63
+
64
+
63
65
  <その他>
64
66
 
65
- 1, `System.getProperty("user.home");`ユーザーのホームディレクトリが取得できます。
67
+ 1, `System.getProperty("user.home");`を使用するとユーザーのホームディレクトリが取得できます。
66
68
 
67
69
  デスクトップにファイルを書き出したい時は、このパスを連結すればいいです。
68
70
 

4

readObjectを追加

2018/02/03 18:32

投稿

umyu
umyu

スコア5846

test CHANGED
File without changes

3

readObjectを追加

2018/02/03 18:31

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -32,13 +32,17 @@
32
32
 
33
33
 
34
34
 
35
+
36
+
35
37
  > まずはcsvに書き込もうということで、書き込みはできるのですが文字化けしてしまい
36
38
 
37
39
 
38
40
 
39
41
  2, 文字化けではなくて、`ObjectOutputStream`なのでバイト配列でファイルを正しく書き込めています。
40
42
 
41
- 質問者様がCSV形式で書き込みたいなら、CSVのライブラリを探して使用するか、自分で記述する必要があります。CSV形式で書き込みたいというわけではないのですよね?
43
+ 質問者様がCSV形式で書き込みたいなら、CSVのライブラリを探して使用するか、自分で記述する必要があります。
44
+
45
+ CSV形式で書き込みたいというわけではないのですよね?
42
46
 
43
47
 
44
48
 
@@ -46,11 +50,15 @@
46
50
 
47
51
  0. 質問文のコードは回答者がコンパイルできる形で記載してくださいな。
48
52
 
49
- `Employee`クラスと`Department`クラスの定義が質問文からは分かりません。
53
+ `Employee`クラスと`Department`クラスの定義がりませんでしたこちらで推測して作成しました
54
+
55
+ 認識の齟齬を少なくするため、コンパイル可能な最低限のソースコードを質問文に記載してくださいな。
56
+
57
+
50
58
 
51
59
  0. エラーメッセージもスクリーンショットではなく、質問欄にコピペで記載してくださいな。
52
60
 
53
-
61
+ エラメッセージはキーワード[「プログラム言語名 エラーメッセージ」](https://www.google.co.jp/search?q=java+プロセスはファイルにアクセスできません。別のプロセスが使用中です。)でぐぐると解決内容がヒットすることが多いです。
54
62
 
55
63
  <その他>
56
64
 
@@ -86,10 +94,14 @@
86
94
 
87
95
  ```Java
88
96
 
97
+ import java.io.FileInputStream;
98
+
89
99
  import java.io.FileOutputStream;
90
100
 
91
101
  import java.io.IOException;
92
102
 
103
+ import java.io.ObjectInputStream;
104
+
93
105
  import java.io.ObjectOutputStream;
94
106
 
95
107
 
@@ -134,9 +146,41 @@
134
146
 
135
147
  pb.start();
136
148
 
149
+ // デシリアライズしてDepartmentクラスの内容を表示
150
+
151
+ Department load_data = readObject(test_csv);
152
+
153
+ System.out.println(load_data);
154
+
155
+
156
+
137
- }
157
+ }
158
+
159
+
160
+
138
-
161
+ public static Department readObject(String file_name) throws IOException {
162
+
139
-
163
+ Department result = null;
164
+
165
+ try (FileInputStream fis = new FileInputStream(file_name)) {
166
+
167
+ try {
168
+
169
+ ObjectInputStream ois = new ObjectInputStream(fis);
170
+
171
+ result = (Department) ois.readObject();
172
+
173
+ } catch (ClassNotFoundException ex) {
174
+
175
+ ex.printStackTrace();
176
+
177
+ }
178
+
179
+ }
180
+
181
+ return result;
182
+
183
+ }
140
184
 
141
185
  }
142
186
 
@@ -152,6 +196,16 @@
152
196
 
153
197
  int age;
154
198
 
199
+
200
+
201
+ @Override
202
+
203
+ public String toString() {
204
+
205
+ return String.format("%s%n%d", this.name, this.age);
206
+
207
+ }
208
+
155
209
  }
156
210
 
157
211
 
@@ -164,6 +218,16 @@
164
218
 
165
219
  Employee leader;
166
220
 
221
+
222
+
223
+ @Override
224
+
225
+ public String toString() {
226
+
227
+ return String.format("%s%n%s", this.name, leader.toString());
228
+
167
- }
229
+ }
230
+
168
-
231
+ }
232
+
169
- ```
233
+ ```

2

インデントを訂正!

2018/02/03 18:31

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -2,15 +2,17 @@
2
2
 
3
3
 
4
4
 
5
- 1,まず質問文のエラー解決方法
5
+ 1, まず質問文のエラー解決方法
6
6
 
7
7
 
8
8
 
9
- >プロセスはファイルにアクセスできません。別のプロセスが使用中です。
9
+ > プロセスはファイルにアクセスできません。別のプロセスが使用中です。
10
10
 
11
- JavaのFileOutputStream をcloseしていないので、プログラム内でファイルを開いた状態です。
12
11
 
12
+
13
+ Javaの`FileOutputStream` をcloseしていないので、プログラム内でファイルを開いた状態です。
14
+
13
- そのため、ProcessBuilderで別プロセスを生成しファイルを開こうとするとアクセスできません。
15
+ そのため、`ProcessBuilder`で別プロセスを生成しファイルを開こうとするとアクセスできません。
14
16
 
15
17
  try~with~Resources文を使ったclose処理のサンプルです。
16
18
 
@@ -28,9 +30,13 @@
28
30
 
29
31
  何かをオープンしたら不要になったタイミングで**必ずクローズ処理**を呼び出すこれを徹底してくださいな。
30
32
 
33
+
34
+
31
35
  > まずはcsvに書き込もうということで、書き込みはできるのですが文字化けしてしまい
32
36
 
37
+
38
+
33
- 2,文字化けではなくて、ObjectOutputStreamなのでバイト配列でファイルを正しく書き込めています。
39
+ 2, 文字化けではなくて、`ObjectOutputStream`なのでバイト配列でファイルを正しく書き込めています。
34
40
 
35
41
  質問者様がCSV形式で書き込みたいなら、CSVのライブラリを探して使用するか、自分で記述する必要があります。CSV形式で書き込みたいというわけではないのですよね?
36
42
 
@@ -38,17 +44,17 @@
38
44
 
39
45
  <質問について>
40
46
 
41
- 1,質問文のコードは回答者がコンパイルできる形で記載してくださいな。
47
+ 0. 質問文のコードは回答者がコンパイルできる形で記載してくださいな。
42
48
 
43
- EmployeeクラスとDepartmentクラスの定義が質問文からは分かりません。
49
+ `Employee`クラスと`Department`クラスの定義が質問文からは分かりません。
44
50
 
45
- 2,エラーメッセージもスクリーンショットではなく、質問欄にコピペで記載してくださいな。
51
+ 0. エラーメッセージもスクリーンショットではなく、質問欄にコピペで記載してくださいな。
46
52
 
47
53
 
48
54
 
49
55
  <その他>
50
56
 
51
- 1,System.getProperty("user.home");でユーザーのホームディレクトリが取得できます。
57
+ 1, `System.getProperty("user.home");`でユーザーのホームディレクトリが取得できます。
52
58
 
53
59
  デスクトップにファイルを書き出したい時は、このパスを連結すればいいです。
54
60
 
@@ -62,7 +68,7 @@
62
68
 
63
69
  ```
64
70
 
65
- 2,ProcessBuilderのコンストラクタの一番最初の引数にはCSVを開きたいプログラム名を渡してくださいな。
71
+ 2, `ProcessBuilder`のコンストラクタの一番最初の引数にはCSVを開きたいプログラム名を渡してくださいな。
66
72
 
67
73
  ```Java
68
74
 

1

コードを追加

2018/02/03 17:58

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -71,3 +71,93 @@
71
71
  pb.start();
72
72
 
73
73
  ```
74
+
75
+
76
+
77
+ ---
78
+
79
+ 最後に変更版のソースコードを記載しておきます、ご参考まで。
80
+
81
+ ```Java
82
+
83
+ import java.io.FileOutputStream;
84
+
85
+ import java.io.IOException;
86
+
87
+ import java.io.ObjectOutputStream;
88
+
89
+
90
+
91
+ public class Practice6 {
92
+
93
+
94
+
95
+ public static void main(String[] args) throws IOException {
96
+
97
+ Employee tanaka = new Employee();
98
+
99
+ tanaka.name = "田中一郎";
100
+
101
+ tanaka.age = 41;
102
+
103
+ Department soumubu = new Department();
104
+
105
+ soumubu.name = "総務部";
106
+
107
+ soumubu.leader = tanaka;
108
+
109
+
110
+
111
+ String desktop_dir = System.getProperty("user.home") + "\Desktop";
112
+
113
+ System.out.println(desktop_dir);
114
+
115
+ String test_csv = desktop_dir + "\test用3.csv";
116
+
117
+ try (FileOutputStream fos = new FileOutputStream(test_csv)) {
118
+
119
+ ObjectOutputStream oos = new ObjectOutputStream(fos); // シリアライズ
120
+
121
+ oos.writeObject(soumubu);
122
+
123
+ }
124
+
125
+
126
+
127
+ ProcessBuilder pb = new ProcessBuilder("notepad.exe", test_csv);
128
+
129
+ pb.start();
130
+
131
+ }
132
+
133
+
134
+
135
+ }
136
+
137
+
138
+
139
+ class Employee implements java.io.Serializable {
140
+
141
+
142
+
143
+ private static final long serialVersionUID = -1L;
144
+
145
+ String name;
146
+
147
+ int age;
148
+
149
+ }
150
+
151
+
152
+
153
+ class Department implements java.io.Serializable {
154
+
155
+ private static final long serialVersionUID = -1L;
156
+
157
+ String name;
158
+
159
+ Employee leader;
160
+
161
+ }
162
+
163
+ ```