質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

3回答

2834閲覧

openFileOutputで作成したファイルのタイムスタンプを取得したい

luckyclock

総合スコア73

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2018/03/20 08:08

タイトル通りなのですが

java

1FileOutputStream fileOutputstream = openFileOutput("test.csv", 2 Context.MODE_APPEND);

で作成したtest.csvの最終更新時間を取得したいです。
最終更新時間の取得自体は調べれば出てくるのですが、

java

1File file = new File("ファイルパス"); 2long lastModified = file.lastModified();~~打ち消し線~~

のようにFileをnewしてからやる方法しか見つかりません。

同様のやり方をするにはまずはopenFileOutputで作成したファイルパスを
取得する必要があるかと思うのですが、機種依存しない方法でどのように
すればよいでしょうか?

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

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

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

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

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

guest

回答3

0

内容から察するに、検討順序が逆です。
まず、FileOutputStreamとFileで扱う、ファイルパスの文字列は一致させた上で処理を記載したほうが良いです。そういったパスなどの情報は定数にしておくか、プロパティファイルなどに外出ししておいたほうが良いと思います。

openFileOutput()というメソッドが内部で何をしているかはわかりませんが、その際にもnew File()して上述の方のようにgetCanonicalPath()を使用してパス取得するのが良いかと思います。

下記は参考コードです。

Java

1 2final String filePath = "test.csv"; 3 4final File file = new File(filePath); 5 6final FileOutputStream fileOutputstream = openFileOutput(file.getCanonicalPath(), Context.MODE_APPEND);

投稿2018/03/21 15:19

編集2018/03/21 15:40
nekt

総合スコア38

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

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

keicha_hrs

2018/03/21 15:50

Androidにはアプリケーション固有の情報を保存するためのプライベート領域というものがあり、そこにアクセスするための専用メソッドがあります。それらに属するメソッドであるopenFileOutput()やopenFileInput()の引数に指定できるのは、パス区切り文字などを含まない「ファイル名」のみです。その回答にあるようなgetCanonicalPath()の戻り値を引数として与えることは、「Androidの仕様上の都合」でできません。
nekt

2018/03/21 15:51

なるほど、Androidの仕様上そうなのですね。タグにAndroidがついているのを見落としていました。 非常に残念です。
keicha_hrs

2018/03/21 16:04

確かにAndroidの質問であることを示すのはタグのみで、質問本文にその情報が何も記されていませんから、誤解はやむを得ないですね。
nekt

2018/03/21 16:06

Terratailをはじめてまだ数十分程度ですので、今後はタグにも注意して回答を書き込みようにいたします。すみませんでした、& ありがとうございました。
luckyclock

2018/03/21 23:55

メイン文にアンドロイドである旨記入すべきでしたね。 わかりにくくすみませんでした。 nektさんも回答ありがとうございました。
guest

0

getCanonicalPath()使うのはどうでしょうか?
https://qiita.com/arai-wa/items/fd0b4d752a31a268604b

投稿2018/03/21 10:22

yukapome789

総合スコア361

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

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

0

ベストアンサー

Context#openFileOutput()やContext#openFileInput()の処理対象となるディレクトリーは、Context#getFilesDir()で取得することができます。

java

1File file = new File(getFilesDir().getPath() + "/" + "test.csv"); 2if(file.exists()) { 3 long lastModified = file.lastModified(); 4}

のようにすれば、機種依存することなくファイルのタイムスタンプを得られるのではないでしょうか。

投稿2018/03/20 15:11

keicha_hrs

総合スコア6768

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

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

luckyclock

2018/03/21 23:54

keicha_hrsさん ありがとうございます。 うまくタイムスタンプを取得することができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問