2012-03-13 17 views
12

Netbeans ve Maven ile uygulama geliştiriyorum. Uygulamamın stdin'den veri alması gerekiyor. Ama nasıl test edeceğimi anlayamadım. Hatalar listesine < data.txt'u eklemek işe yaramıyor. Ben varsayalımNetbeans'de stdin'den stdin'e girdiyi yönlendirmenin bir yolu var mı?

$ java MyProgram < data.txt 
+0

Stdin'i neden sadece bir dosyaya erişen bir paramenter değil, girdi olarak kullanıyorsunuz? – khmarbaise

+0

@khmarbaise Açık dosya/dosyaya yaz/dosyayı kapat/çalıştır/dosya aç/dosyadan/dosyadan oku gibi: altından çocuk işlemine yazmak/yazmak daha hızlıdır. Benim senaryo ile dosya sistemi performansına bağlı değilim ve ana işlem ona yazarken akışından okuyabiliyordum ... – denys

cevap

6

Bu, kendi çalışma hedefinizi projenizin build.xml dosyasına ekleyerek yapılabilir. Böyle Run, Debug olarak komutları ve kaydet özelliğini Derleme projesi için kapalıysa Testi, yalnızca özel build.xml kullanmak

<target name="run" depends="jar"> 
    <exec dir="${work.dir}" executable="java" input="${work.dir}/inputfile.txt"> 
    <arg value="-jar"/> 
    <arg file="${dist.jar}"/> 
    </exec> 
</target> 

Not: Örneğin. Bu nedenle, projenizin özelliklerinde Kaydetme Derlemesinin kapatıldığından emin olmanız gerekir.

+0

Bu çalışmayı elde etmek için "Kaydetme Üzerine Derleme" nin neden kapatılması gerektiğini merak ediyorum. –

10

Eğer böyle bir şey vardır:: Bu uygulamanın bir giriş noktası olarak kullanılabilir olabilir

public static void main(String[] args) { 
... 
} 

ve ondan önce giriş kanalı değiştirmek

Ben aynı ihtiyacım yoluyla:

FileInputStream is = new FileInputStream(new File("test.data")); 
System.setIn(is); 

Yukarıdakiler bir ünite/entegrasyon testi içinde kullanılabilir.

+0

Bu @ZeroTau çözümü –

+0

ile karşılaştırıldığında oldukça rahat ama korktuğum kodun işlevini değiştirecektir - yani sonuç programı, standart girdi akışı yerine "test.data" dosyasından girdi okuyacaktır. –

1

NetBeans'de nasıl olduğundan emin değilim, ancak tutulmada bir şeyleri konsola yazabilirsiniz ve STDIN çalışan uygulama için yeniden yönlendirilir. Aynı şeyin NetBeans'de de çalışması gerektiğine inanıyorum. Yani, sadece uygulamanızı çalıştırın, daha sonra data.txt içeriğini kopyalayıp yapıştırın ve muhtemelen <ENTER>'a basın.

hiçbir şey yardım kullanımı uzaktan hata ayıklama, yani şu şekilde komut isteminden programınızı çalıştırırsanız: java -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=y MyProgram < data.txt

sonra NetBeans bu sürece bağlayın.

+0

sorumu anlayan kişi sizsiniz. Ama ne yazık ki bu kabuk gövdesi Netbeans'de çalışmaz :( – denys

1

Eski okul, ama bildiğim şey bu. Bir uyarı, mvn komutunun bittiğinde klibe dönmemesidir, ancak bazı amaçlar için bu kabul edilebilirdir. Eğer proje kök dizininde

mvn "-Dexec.args = -classpath% sınıf yolu com.mycompany.test" -Dexec.executable =/Dosyalar/jdk1.7/bin/java exec-maven- olması gerekir Not Eklenti: 1.2.1: exec </tmp/Giriş

0

Aşağıdaki metinle Dosyalar-> build.xml altında "run-input" yeni bir hedef ekleyin. Not: Bu sürüm, java çalışma zamanının doğru konumunu kullanır. Ayrıca, input1 dosyasıyla girdi olarak adlandırılan bir dizin yaptığınızı varsayar.

<target name="run-input" depends="jar"> 
    <exec dir="${work.dir}" executable="${java.home}/bin/java" input="${src.dir}/inputs/input1"> 
    <arg value="-jar"/> 
    <arg file="${dist.jar}"/> 
    </exec> 
</target> 

Bu yeni hedef için her zaman bir kısayol oluşturabilirsiniz.

İlgili konular