簡體   English   中英

如何讓java識別cygwin下的符號鏈接

[英]How to get java to recognize symbolic links under cygwin

這是一個非常簡單的java程序來打印文件的第一行:

import java.io.*
public class test {
  public static void main(String[] args) throws IOException {
    System.out.print(new BufferedReader(new FileReader(args[0])).readLine());
  }
}

當我在cygwin下運行此程序並將其傳遞給符號鏈接的名稱時,它會打印符號鏈接的內容,而不是該鏈接的目標:

$ echo foo > testfile
$ ln -s testfile symlink_to_testfile
$ java test testfile
foo
$ java test symlink_to_testfile
!<symlink> ?t e s t f i l e

我如何說服java遵循符號鏈接? 我希望有一些比自己實現重定向更簡單的東西。

我喜歡derpaderp的回答,所以我根據自己的需要調整了它。 更通用的是不假設-jar選項並且沒有包含空格的參數的問題。 我已將此腳本移至/usr/bin/java並使其可執行。

#!/bin/sh    

JAVA_PATH="/cygdrive/c/Program Files/Java/jre7/bin/java"


declare -a WINDOWS_ARGS
i=0
for ARG in "$@"
do

    if [ -e "$ARG" ]; then
        # pathname argument is only converted if the file exists,
        # so this trick may not be appropriate everywhere...
        WINDOWS_ARGS[$i]="`cygpath -w $ARG`"
    else
        WINDOWS_ARGS[$i]="$ARG"
    fi
    (( i++ ))
done
"$JAVA_PATH" "${WINDOWS_ARGS[@]}"

我也有這個問題,所以我寫了一個shell包裝器,包括類似的東西

# java runs as native windows program, so convert pathnames
WINDOWS_ARGS=""
for ARG in $*
do
if [ -e $ARG ]
# pathname argument is only converted if the file exists,
# so this trick may not be appropriate everywhere...
then
WINDOWS_ARGS="$WINDOWS_ARGS `cygpath -w $ARG`"
else
WINDOWS_ARGS="$WINDOWS_ARGS $ARG"
fi
done
java -jar `cygpath -w myprogram.jar` $WINDOWS_ARGS

因為我無論如何都要從cygwin shell中調用一些東西。 如果您需要從窗口$環境啟動腳本,請參閱http://cygwin.com/ml/cygwin/2004-07/msg00163.html

cygpath是轉換路徑字符串的建議方法...我到達此頁面是因為我想打開一個帶有硬編碼路徑的File對象,該路徑可能是一個cygwin符號鏈接。 仍然不確定那個...運行一個子cygpath似乎極端,並要求cygpath在你的Windows路徑或cygwin目錄在每台計算機上的相同位置。

我認為沒有一個簡單的答案。 正如各種頁面所述,Cygwin是一個應用程序套件而不是操作系統,Sun不支持Cygwin上的Java。

但是, 可以從源代碼為Cygwin構建JDK 6。 當然, 這個頁面暗示它是可能的。 這是否給你一個了解Cygwin風格符號鏈接的JDK是任何人猜... :-)

您使用的是哪個版本的Java? 這個Java教程表明NIO知道文件系統鏈接,所以只要你是Java1.4或更高版本,你就應該感到厭煩。 它可能是它正在討論的實際上是nio2,在這種情況下嘗試使用Java7預發行版。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM