2011-03-30 7 views
32

Я не уверен, как вы должны читать из системного ввода из файла Java.Чтение из System.in - Java

Я хочу, чтобы быть в состоянии назвать java myProg < file

Где файл, что я хочу, чтобы читать в виде строки и дан MyProg в основном методе.

Любые предложения?

+0

В чем проблема? 1) вы не знаете, как запустить java-программу с аргументом 2) вы не знаете, как открыть файл в java-программе, которая имеет имя файла в качестве аргумента основного метода. или 3) оба – Fortega

+2

@Fortega ни то. Он хочет подключить файл вместо ввода системы. – corsiKa

+1

@ Питер иногда читает 68 миллионов страниц немного много! – corsiKa

ответ

50

Вы можете использовать System.in для чтения из стандартного ввода. ИТ работает так же, как ввод его с клавиатуры. ОС обрабатывает переход из файла в стандартный ввод. :-)

class myProg { 

    public static void main(String[] args) { 
     Scanner sc = new Scanner(System.in); 
     System.out.println("Printing the file passed in:"); 
     while(sc.hasNextLine()) System.out.println(sc.nextLine()); 
    } 
} 
+0

не забудьте импортировать java.util.Scanner – shieldgenerator7

+0

также, документация сканера: https://docs.oracle .com/javase/7/docs/api/java/util/Scanner.html – shieldgenerator7

4

Использование System.in, это InputStream, который только служит этой цели

16

Ну, вы можете прочитать System.in себя как это действует InputStream. Или же вы можете обернуть его в BufferedReader:

BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
+1

Обертка в BufferedReader кажется плохой идеей, потому что в Linux (возможно, не в каждой конфигурации) это приводит к тому, что ваша программа не получает данные после ввода чего-либо в терминале/PuTTy и нажмите «Enter». Чтобы программа получила то, что вы набрали, вам нужно отправить специальный символ, чтобы очистить поток. –

4

Вы читали из System.in так же, как вы бы для ввода с клавиатуры, используя, например, InputStreamReader или Scanner.

1

Вы можете позвонить java myProg arg1 arg2 ...:

public static void main (String args[]) { 
    BufferedReader in = new BufferedReader(new FileReader(args[0])); 
} 
-5
class myFileReaderThatStarts with arguments 
{ 

class MissingArgumentException extends Exception{  
     MissingArgumentException(String s) 
    { 
    super(s); 
    } 

    }  
public static void main(String[] args) throws MissingArgumentException 
{ 
//You can test args array for value 
if(args.length>0) 
{ 
    // do something with args[0] 
} 
else 
{ 
// default in a path 
// or 
    throw new MissingArgumentException("You need to start this program with a path"); 
} 
} 
-4

Вы, вероятно, ищете что-то вроде этого.

FileInputStream in = new FileInputStream("inputFile.txt"); 
BufferedReader br = new BufferedReader(new InputStreamReader(in)); 
+0

Это довольно старый пост. Удостоверьтесь, что вы внимательно комментируете то, что видно многим людям, поэтому, скорее всего, многие эксперты уже проверили его. – smttsp

3

В Java консольного ввода осуществляется путем чтения из System.in. Для получения символа на основе потока, который прикреплен к консоли, оберните System.in в BufferedReader объекта. BufferedReader поддерживает буферный входной поток. Наиболее часто используется конструктор показано здесь:

BufferedReader(Reader inputReader) 

Здесь inputReader это поток, который связан с экземпляром BufferedReader, который будучи создан. Reader - абстрактный класс. Одним из его конкретных подклассов является InputStreamReader, , который преобразует байты в символы.

Чтобы получить объект InputStreamReader, который связан с System.in, используйте следующий конструктор:

InputStreamReader(InputStream inputStream) 

Поскольку системы.в относится к объекту типа InputStream, его можно использовать для inputStream. Собираем все вместе, следующая строка кода создает BufferedReader, подключенный к клавиатуре:

BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 

После выполнения этого оператора бр представляет собой поток символов на основе, что связано с консоль через System.in.

Это взято из книги Java- The Complete Reference by Herbert Schildt

Смежные вопросы