dポイントプレゼントキャンペーン実施中!

Windows上のサーバから受信するXML情報をMac上のクライアントで受信して処理するため、
XMLに書かれたWindowsのパス情報(DTD等)をMac上で扱えるパスに置換する必要があります。

やりたいことは

\\Server\share\ほげ\ほげほげ.dtd



/Users/user/smb_mount_point/ほげ/ほげほげ.dtd

に置き換えるような処理です。

文字列処理系のクラスを使いゴリゴリと書き換えることは容易にできる程度のものですが、
java.io.File やnioのセパレータを変更することができれば、そのほうがスマートで可読性のよい
コードになると思っています。
これらのライブラリでシステムデフォルトからファイルセパレータを変更することは
できるのでしょうか。

質問者からの補足コメント

  • 質問意図が伝わりにくいので回答がつかないようです。
    補足します。

    Mac上でWindows表現のファイル名部分のみ抜き出し、パスを付け替えることがしたいのです。

    File.getName()の動作はWindows環境か、Mac環境で動作が異なり、Mac環境では、UNCからファイル名部分を切り出すことができません。

    当然ながらString.substring()などで切り出せば出来る話ですが、それはファイル名部分を切り出すという意図が伝わりにくい、もしくはなんでそんなことをしてるのかコメントで説明がいるようなコードになるので書きたくない。と言うがコーディング意図になります。

    一応、これでもまだ少し不満は残りますが、前処理で
    windowsPath=windowsPath.replace(“\\”,File.separator);
    とする事で自己解決しました。

      補足日時:2019/02/10 21:39
  • 最終的に以下の方法に落ち着きました。
    windowsマシン上でシステムプロパティのインスタンスをシリアライズ

    mac上のクライアントプログラムではシリアライズしたインスタンスを読み出し。windowsのセパレーターを取得。

    windows側から送られたパスを、上のwindowsのセパレーターからランタイム環境のセパレーターに置換

    File.getFileで切り出し。

    カテ間違えたかと思うような的外れな回答ばかりでウンザリしましたのでこれで閉じます。

      補足日時:2019/02/13 22:42
  • ひとつ妙な回答がつく原因がこれかなとおもったので
    補足です。

    XML = XMLファイルではありません
    XMLの構造を持ったString型のデータで、
    TCP/IP通信で取得します。
    ファイルの実体はありません。
    ファイルとしての実体があるのはDTDだけです。

      補足日時:2019/02/13 23:16

A 回答 (2件)

ファイル内の文字列を書き換えるなら


shellから、find -[時間指定オプション] で新しいファイルを抽出して、
sedを使って書き換えればいいと思う。
それをシェルスクリプトにして、時間指定(cron)で実行させれば
完全自動化じゃね?
    • good
    • 0
この回答へのお礼

Mac上で動で動かすのはJavaのアプリケーションプログラムです。
パスを書き換えた後の処理も当然あるのです。売り物なので何をするものかはここでは言えませんが。

パスを書き換えることが最終目的ではありません。
だいたい文字列置換するのにjavaアプリケーションの中からわざわざシェルを呼び出して文字列置換するようなことは普通はしません。
また、パスを処理する専用のクラスライブラリがあるのに、文字列操作で書き換えるのがスマートでないので質問しました。
もっとひどい方法かと思います。

お礼日時:2019/02/13 22:31

高校生でもやっていますし、専門学校でもやらされます。

そもそもそれくらい出来なきゃサーバの管理が出来ません。
    • good
    • 2

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!