Межплатформенный способ открыть файл с помощью Java 1.5

Ниже блок кода не является точным решением, но он определенно поможет вам.

SQL

DECLARE @Dt datetime

SELECT @Dt='02-21-2008'

SELECT DATEPART( wk, @Dt)
11
задан asalamon74 28 November 2008 в 08:41
поделиться

7 ответов

+1 для этого ответа

Дополнительно я предложил бы следующую реализацию с помощью полиморфизма:

Таким образом, можно добавить новую платформу, легче путем сокращения связывающийся среди классов.

Клиентский код:

 Desktop desktop = Desktop.getDesktop();

 desktop.open( aFile );
 desktop.imaginaryAction( aFile );

Рабочий стол impl:

package your.pack.name;

import java.io.File;

public class Desktop{

    // hide the constructor.
    Desktop(){}

    // Created the appropriate instance
    public static Desktop getDesktop(){

        String os = System.getProperty("os.name").toLowerCase();

        Desktop desktop = new Desktop();
         // This uf/elseif/else code is used only once: here
        if ( os.indexOf("windows") != -1 || os.indexOf("nt") != -1){

            desktop = new WindowsDesktop();

        } else if ( os.equals("windows 95") || os.equals("windows 98") ){

            desktop = new Windows9xDesktop();

        } else if ( os.indexOf("mac") != -1 ) {

            desktop = new OSXDesktop();

        } else if ( os.indexOf("linux") != -1 && isGnome() ) {

            desktop = new GnomeDesktop();

        } else if ( os.indexOf("linux") != -1 && isKde() ) {

            desktop = new KdeDesktop();

        } else {
            throw new UnsupportedOperationException(String.format("The platform %s is not supported ",os) );
        }
        return desktop;
    }

    // default implementation :( 
    public void open( File file ){
        throw new UnsupportedOperationException();
    }

    // default implementation :( 
    public void imaginaryAction( File file  ){
        throw new UnsupportedOperationException();
    }
}

// One subclass per platform below:
// Each one knows how to handle its own platform   


class GnomeDesktop extends Desktop{

    public void open( File file ){
        // Runtime.getRuntime().exec: execute gnome-open <file>
    }

    public void imaginaryAction( File file ){
        // Runtime.getRuntime().exec:gnome-something-else <file>
    }

}
class KdeDesktop extends Desktop{

    public void open( File file ){
        // Runtime.getRuntime().exec: kfmclient exec <file>
    }

    public void imaginaryAction( File file ){
        // Runtime.getRuntime().exec: kfm-imaginary.sh  <file>
    }
}
class OSXDesktop extends Desktop{

    public void open( File file ){
        // Runtime.getRuntime().exec: open <file>
    }

    public void imaginaryAction( File file ){
        // Runtime.getRuntime().exec: wow!! <file>
    }
}
class WindowsDesktop extends Desktop{

    public void open( File file ){
        // Runtime.getRuntime().exec: cmd /c start <file>
    }

    public void imaginaryAction( File file ){
        // Runtime.getRuntime().exec: ipconfig /relese /c/d/e
    }
}
class Windows9xDesktop extends Desktop{

    public void open( File file ){
        //Runtime.getRuntime().exec: command.com /C start <file>
    }

    public void imaginaryAction( File file){
       //Runtime.getRuntime().exec: command.com /C otherCommandHere <file>
    }
}

Это - только пример, в реальной жизни не стоит для создания нового класса только для параметризации значения (командная строка %s), Но позвольте нам, действительно предполагают, что каждый метод работает, другой ступает в особенный метод платформы.

При выполнении этого вида подхода, может удалить ненужные конструкции if/elseif/else, которые со временем могут представить ошибки (если существует 6 из них в коде, и изменение является neede, можно забыть обновлять одного из них, или копией/вставкой можно забыть изменять команду для выполнения),

11
ответ дан 3 December 2019 в 01:21
поделиться
public static boolean isWindows() {
    String os = System.getProperty("os.name").toLowerCase();
    return os.indexOf("windows") != -1 || os.indexOf("nt") != -1;
}
public static boolean isMac() {
    String os = System.getProperty("os.name").toLowerCase();
    return os.indexOf("mac") != -1;
}
public static boolean isLinux() {
    String os = System.getProperty("os.name").toLowerCase();
    return os.indexOf("linux") != -1;
}
public static boolean isWindows9X() {
    String os = System.getProperty("os.name").toLowerCase();
    return os.equals("windows 95") || os.equals("windows 98");
}

и

 if (isLinux())
  {
     cmds.add(String.format("gnome-open %s", fileName));
     String subCmd = (exec) ? "exec" : "openURL";
     cmds.add(String.format("kfmclient "+subCmd+" %s", fileName));
  }
  else if (isMac())
  {
     cmds.add(String.format("open %s", fileName));
  }
  else if (isWindows() && isWindows9X())
  {
     cmds.add(String.format("command.com /C start %s", fileName));
  }
  else if (isWindows())
  {
     cmds.add(String.format("cmd /c start %s", fileName));
  }
13
ответ дан 3 December 2019 в 01:21
поделиться

Так же, как дополнение: Вместо gnome-open, использовать xdg-open. Это - часть XdgUtils, которые являются в свою очередь частью пакета Поддержки настольных систем LSB (запускающийся с 3,2).

Банка (необходимо) все еще использовать gnome-open как нейтрализация, но xdg-open будет также работать над рабочими столами неGNOME.

5
ответ дан 3 December 2019 в 01:21
поделиться

JDIC является библиотекой, которая обеспечивает подобную Рабочему столу функциональность в Java 1.5.

12
ответ дан 3 December 2019 в 01:21
поделиться

SWT дает Вам возможность lokk для стандартной программы для открытия файла через:

final Program p = Program.findProgram(fileExtension);
p.execute(file.getAbsolutePath());

Строго это не является Межплатформенным, так как SWT является зависимым платформы, но для каждой платформы можно использовать diffenrent SWT банка.

4
ответ дан 3 December 2019 в 01:21
поделиться

Можно использовать значение по умолчанию ОС способ открыть его для Вас.

  • Windows: "cmd/c имя файла
  • Linux w/gnome "открытое для гнома имя файла"
  • Linux w/Kde??
  • OSx "открывают имя файла"
0
ответ дан 3 December 2019 в 01:21
поделиться

Мы действительно помещаем команду снаружи где-нибудь в конфигурационном файле.

Ваш "JAR и исходный код" будут "межплатформенными", но Ваше развертывание не делает.

Можно также сделать что-то вроде этого ответ. Можно поместить имя класса класса фабрики реализации "Deskop" в файл настройки. (может быть руководство или пружина, если Вам нравится),

-3
ответ дан 3 December 2019 в 01:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: