No.2ベストアンサー
- 回答日時:
Androidのプログラムは組んだことありませんけど、もしかしてファイル入出力のためのオープン処理はopenFileInput()
,openFileOutput()を使わないといけないのではないですか?(new FileOutputStream(file)を直接使ってはいけない)ありがとうございました、
理由はよく分かりませんが、
次のようにしたら、添付ファイルが取り出せました。
base64 デコードもしてくれています。
if (attachment) {
String disp = part.getDisposition();
// 添付ファイルの場合
if (disp == null || disp.equalsIgnoreCase(Part.ATTACHMENT)) {
String filename = part.getFileName();
if (filename != null) {
filename = MimeUtility.decodeText(filename);
} else {
filename = "添付ファイル" + html;
}
String newName = filename;
File f = new File(filename);
// find a file that does not yet exist
for (int i = 1; f.exists(); i++) {
newName = filename + i;
f = new File(newName);
}
try {
FileOutputStream writer=openFileOutput(newName, MODE_PRIVATE);
InputStream in2 = new BufferedInputStream(part.getInputStream());
int b;
while ((b = in2.read()) != -1) writer.write(b);
writer.flush();
if (writer != null)
writer.close();
if (in2 != null)
in2.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
No.1
- 回答日時:
「書き込み可能な場所にファイルを作ってください」としかいいようがないような。
この回答への補足
ありがとうございます。
PCでのフォルダやファイルの属性なら見て変更もできますが、
Eclipse での Android アプリ開発では、
そもそも、PCのどこにファイルがあるのか、フォルダの属性の
変更方法など、全く分かりません。
DDMS を使って、見てみると、
ほかの、プロジェクトでファイルの作成が可能なものの場合は
files という フォルダがあるのですが、
この、作成中のプロジェクトにはありません。
また、DDMSで files のフォルダを作っても、
書き込みはできません。
書き込みできる場所の作り方、見つけ方を教えていただければ幸いです。
よろしくお願いします。
ご指導、ありがとうございます。
ほかのサンプルと比較しながらいろいろ試しました。
public static void dumpPart(Part part) throws Exception {
String html = "";
boolean attachment = false;
if (part instanceof Message) {
-- 省略---
// 内容
String scont = "内容:\n" + message.getContent();
}
if (part.isMimeType("text/plain")) { // テキストの場合
String scont = "内容:\n" + part.getContent();
} else if (part.isMimeType("multipart/*")) { // マルチパートの場合
Multipart mp = (Multipart) part.getContent();
int count = mp.getCount();
for (int i = 0; i < count; i++) {
dumpPart(mp.getBodyPart(i));
}
} else if (part.isMimeType("message/rfc822")) { // メッセージの場合
dumpPart((Part) part.getContent());
} else if (part.isMimeType("text/html")) { // HTMLの場合
html = ".html";
attachment = true;
} else { // その他の場合
attachment = true;
}
if (attachment) {
String disp = part.getDisposition();
// 添付ファイルの場合
if (disp == null || disp.equalsIgnoreCase(Part.ATTACHMENT)) {
String filename = part.getFileName();
if (filename != null) {
filename = MimeUtility.decodeText(filename);
} else {
filename = "添付ファイル" + html;
}
///////////////////////////////////////////
/*
try{
FileOutputStream fos=openFileOutput(filename, MODE_PRIVATE);
String text="openFileOutputで書き込み";
fos.write(text.getBytes());
fos.close();
}catch(FileNotFoundException e){
}catch(IOException e){
}
try{
FileInputStream fis=openFileInput(filename);
EditText editText1=(EditText)findViewById(R.id.editText1);
byte buffer[]=new byte[100];
fis.read(buffer);
editText1.setText(new String(buffer).trim());
fis.close();
}catch(FileNotFoundException e){
}catch(IOException e){
}
*/
File f = new File(filename);
try {
OutputStream writer = new BufferedOutputStream(new FileOutputStream(f));
InputStream in2 = new BufferedInputStream(part.getInputStream());
int b;
while ((b = in2.read()) != -1) writer.write(b);
writer.flush();
writer.close();
if (writer != null)
writer.close();
if (in2 != null)
in2.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
で、
public static void dumpPart(Part part) throws Exception {
を、
public void dumpPart(Part part) throws Exception {
に変更すると、
コメントアウトした部分、
/*
try{
FileOutputStream fos=openFileOutput(filename, MODE_PRIVATE);
String text="openFileOutputで書き込み";
fos.write(text.getBytes());
fos.close();
}catch(FileNotFoundException e){
}catch(IOException e){
}
try{
FileInputStream fis=openFileInput(filename);
EditText editText1=(EditText)findViewById(R.id.editText1);
byte buffer[]=new byte[100];
fis.read(buffer);
editText1.setText(new String(buffer).trim());
fis.close();
}catch(FileNotFoundException e){
}catch(IOException e){
}
*/
は、動いてファイルが作成されます。
しかし、自動的に、base64 デコードをしてもらうつもりで、欲張ると、
OutputStream writer = new BufferedOutputStream(new FileOutputStream(f));
の部分で、エラーになってしまいます。
原因がわかりません。
何かヒントがありましたらよろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- Windows 8 iOS や Winows で使われているAccountの考え方がいまいち分かりません。これはLinu 2 2022/04/28 22:05
- Windows 10 VirtualBox 7のゲストOSでの物理HDDパーティションのマウント方法 2 2023/05/04 13:01
- JavaScript 2段階プルダウンで1段階目の選択を終えた後に選択ボックスを見えなくしたい 2 2022/07/05 21:58
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- UNIX・Linux Linuxの実行結果を修正したいです。 6 2022/11/22 12:57
- Windows 10 Windows11についての質問ー3。 2 2022/12/13 14:58
- Windows 10 インストールしたてのVirtualBoxの仮想マシンにDHCPで割り振られるIPアドレスにつきまして 1 2023/05/03 14:46
- その他(プログラミング・Web制作) Fortranでの出力ファイル 2 2023/03/21 21:25
- Windows 10 explorerをedgeで開く方法 2 2022/06/05 14:59
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SNSなどで使われる、n回目とは...
-
中学生でも薬局でTENGAって買え...
-
子どもは作らない方が賢い、ま...
-
私の好きな人が、LINEの返信は...
-
5ch
-
誘いは難しい
-
カカオトークで、私が送った写...
-
スマホからごちゃんねるに書き...
-
小論文について
-
もし男性で教員をしている人が...
-
2chのスレの立て方を教えてくだ...
-
障害者の嫁
-
仕事帰り社内の人と同じ時間に...
-
職場で噂される男女とされない...
-
5chでスレ立てしたいのですがや...
-
熟女の保険外交員って誘ってま...
-
新卒女性です。男性の先輩から...
-
ブルーレイに書き込み...1日も...
-
雑談たぬきについてなのですが...
-
いちいちインスタのストーリー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SNSなどで使われる、n回目とは...
-
中学生でも薬局でTENGAって買え...
-
仕事帰り社内の人と同じ時間に...
-
高2の女子です。 修学旅行で、...
-
子どもは作らない方が賢い、ま...
-
誘いは難しい
-
熟女の保険外交員って誘ってま...
-
職場で噂される男女とされない...
-
5ch
-
カカオトークのリンクの貼り付...
-
雑談たぬきについてなのですが...
-
新卒女性です。男性の先輩から...
-
カカオトーク退会すると、エラ...
-
メールソフト サンダーバード...
-
自分から話しかけない人ってそ...
-
エクセルのデータはDVDに保...
-
障害者の嫁
-
ビデオ通話でのオナニーについ...
-
カカオトークで、私が送った写...
-
語尾に笑いが含まれる人の心理 ...
おすすめ情報