سؤال

وهنا هو قطعة بسيطة من التعليمات البرمجية:

import java.io.*;
public class Read {
 public static void main(String[] args) {
     BufferedReader f = new BufferedReader(new InputStreamReader(System.in));
  while(true)
  {
   String x = null;
   try{
    x = f.readLine();
   }
   catch (IOException e) {e.printStackTrace();}
   System.out.println(x);
  }
 }
}

وI تنفيذ هذا النحو: جافا مقروءة

وحالما يتم ضخها في input.txt تماما في البرنامج، س يبقى الحصول على بلا قيم لانهائية. لماذا هذا؟ هل هناك طريقة التي أستطيع أن جعل في قياسي (سطر الأوامر) نشط بعد تغذيتها الملف إلى الكود هو عمله؟ لقد حاولت إغلاق وإعادة فتح تيار، فإنه لا يعمل. إعادة تعيين غيرها أيضا.

هل كانت مفيدة؟

المحلول

وخلال تنفيذ "java Read < input.txt" كنت قد قال نظام التشغيل الذي لهذه العملية، وملف الأنابيب <م> هو المعيار في لا يمكنك ثم يعود مرة أخرى إلى سطر الأوامر من داخل التطبيق.

إذا كنت تريد أن تفعل ذلك، ثم تمرير input.txt كمعلمة اسم الملف إلى التطبيق، وفتح / قراءة / إغلاق الملف بنفسك من داخل التطبيق، ثم قرأ من الإدخال القياسي للحصول على الاشياء من سطر الأوامر.

نصائح أخرى

حسنا، هذا هو الحال بالنسبة للقراءة في BufferedReader. readLine() عوائد null عندما يتم ضرب نهاية تيار. ربما حلقة لا نهائية الخاص بك هو المشكلة؛ -)

// try / catch ommitted

String x = null;

while( (x = f.readLine()) != null )
{
   System.out.println(x);
}

وتحتاج إلى إنهاء حلقة في حين الخاص بك عند خط باطل، مثل هذا:

    BufferedReader in = null;
    try {
        in = new BufferedReader(new InputStreamReader(System.in));
        String line;
        while ((line = in.readLine()) != null) {
            System.out.println(line);
        }
    }
    catch (IOException e) {
        logger.error("IOException reading System.in", e);
        throw e;
    }
    finally {
        if (in != null) {
            in.close();
        }
    }
<اقتباس فقرة>   

هل هناك طريقة التي أستطيع أن جعل في قياسي (سطر الأوامر)   نشط بعد تغذيتها الملف إلى الكود هو عمله؟

وآسف لعثرة على السؤال القديم، ولكن أيا من الإجابات يشير حتى الآن إلى أن هناك <م> هو و(شل فقط) وسيلة لتمرير الخلف لتعزية المدخلات بعد الأنابيب في ملف.

إذا قمت بتشغيل الأمر

{ cat input.txt & cat; } | java Read

وبعد ذلك النص من input.txt سيتم تمريرها إلى java Read وسوف بعد ذلك انخفض مرة أخرى لتعزية الإدخال.

ملاحظة أنه إذا كنت ثم اضغط على السيطرة + D ، سوف تحصل على حلقة لا نهائية من nulls، إلا إذا قمت بتعديل البرنامج لإنهاء حلقة عندما يتلقى فارغة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top