回答編集履歴
6
主語を変更!
test
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
|
11
11
|
|
12
12
|
|
13
|
-
|
13
|
+
`FileOutputStream` のインスタンス(変数:fos)に対してclose処理を行っていないため、Javaプログラム内ではファイルを開いた状態です。
|
14
14
|
|
15
15
|
そのため、`ProcessBuilder`で別プロセスを生成しファイルを開こうとするとアクセスできません。
|
16
16
|
|
5
いんでんと!
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を追加
test
CHANGED
File without changes
|
3
readObjectを追加
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のライブラリを探して使用するか、自分で記述する必要があります。
|
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
インデントを訂正!
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
|
-
|
47
|
+
0. 質問文のコードは回答者がコンパイルできる形で記載してくださいな。
|
42
48
|
|
43
|
-
EmployeeクラスとDepartmentクラスの定義が質問文からは分かりません。
|
49
|
+
`Employee`クラスと`Department`クラスの定義が質問文からは分かりません。
|
44
50
|
|
45
|
-
|
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
コードを追加
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
|
+
```
|