Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

文字列の変換について

以下はJavaScriptからイメージファイルのパスを受け取り「\\」の部分を「/」に変換後imageFile.exists()でそのファイルが存在するかを調べてからファイルを削除するものですが結果がexists()の結果が「false」しか返ってきません。
しかしHTML側で戻り値「imageFilePath」の中身を見てみると「\\」の部分は「/」に変換されています。
また直接JavaScript側でremoveThumbnailImage()を呼び出す時にremoveThumbnailImage("C:/Users/Admin/workspace/website/images/test.jpg")の様に直接パスを指定又はJava側でimageFilePath = "C:/Users/Admin/workspace/website/images/test.jpg"の様にすると
.exists()では「true」を返してきます。
どうすれば解決するでしょうか?




public static String removeThumbnailImage(String imageFilePath){
    
    //// 受け取ったパスの「\\」を「/」に変換するが「false」しか返ってこない
    //imageFilePath = imageFilePath.replaceAll("\\\\", "/");
    
    ////以下の場合は「true」を返す(\\はバックスラッシュ2つ)
    //imageFilePath = "C:\\Users\\Admin\\workspace\\website\\images\\test.jpg";
    //imageFilePath = "C:/Users/Admin/workspace/website/images/test.jpg";
    //StringBuffer sb = new StringBuffer();
    
    

    ////以下の処理でも結果は「false」
    /*StringBuffer sb = new StringBuffer();
    for(int i=0;i<imageFilePath.length();i++){
        switch(imageFilePath.charAt(i)){
            case '\\': sb.append("/"); break;
            default : sb.append(imageFilePath.charAt(i));
        }//end switch
    }//end for*/
    
    
    /////画像を保存したファイルまでのパスでFileオブジェクト生成
    File imageFile = new File(sb.toString());
    
    try{
        ////イメージファイルが存在するか調べる
        if(imageFile.exists()){
            ////イメージファイルを削除
            //imageFile.delete();
            return "true";
        }else{
            return imageFilePath;    
        }//end if
    }catch(Exception e){
        e.printStackTrace();
    }//end try

}

5

回答

93014

閲覧

5件の回答

評価

0

\を2つにする意味分かってる?
ほんとに基礎的な話なんだけど。

評価

0

imageFilePath = imageFilePath.replaceAll("\\", "/");

ではエラーが出ました。
なので"\\\\"にしてパスをコンソールで確認した所
問題ありませんでした。


そもそも

////以下の処理でも結果は「false」
    /*StringBuffer sb = new StringBuffer();
    for(int i=0;i<imageFilePath.length();i++){
        switch(imageFilePath.charAt(i)){
            case '\\': sb.append("/"); break;
            default : sb.append(imageFilePath.charAt(i));
        }//end switch
    }//end for*/

のコードで何故出来ないのかが分からないので質問しました。

評価

0

コメントアウトされているコードだらけで実際に動かしているコードが分かりにくいです。実際に動かしているコードを提示したほうがいいんじゃないでしょうか?

1文字ずつ判定するfor文を除くと、空のStringBufferを使ってFileインスタンスを作成しているように見えるので、どうやってもexists()はfalseを返すように思えます。これは、、スラッシュ区切りのパスを直接渡した場合はtrueが返ってくると言っていることと食い違ってますね。

まずはexistsの戻り値がtrueかfalseかではなく置換されたファイルパス自体を確認すべきではないでしょうか。imageFile.getCanonicalPath()を表示してみてはどうでしょうか。

評価

0

>のコードで何故出来ないのかが分からないので質問しました。

文字リテラルの"\\"は、
コンパイルすると"\"になっちゃうからです。
ちなみに、コントロール・コードですよ。
コントロール・コードと文字コードで、
別の値があるわけじゃない。

というわけで、コンパイル後に"\\"になるためには、
コード中の記述は"\\\\"でなければなりません。

評価

0

なんていうサーバーのファイルを削除しようとしてる
の?
Windows200x サーバー?
Linux のなんちゃらサーバー?

前者なら、C:\xxx\www\zzz\aaa.jpg の "\" は変換する
必要無いです。
後者なら、変換も必要ですが、"C:" が不要。

というか、Webシステムなんじゃないのですか?
サーバーの実アドレスをユーザーが知ってるのはOKなん
ですか?

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。