risposta Snarky: quello che stai facendo male è la creazione di solo 2 oggetti in Java per fare qualcosa ... se si cerca, si può probabilmente trovare alcuni più classi che estendono BufferedReader o ExtendedBufferReader ecc. e quindi può essere Enterprise Java reale.
Ora che ho ottenuto dal mio sistema: risposta più utile. System.in viene chiuso quando si inserisce EOF, che è Control-D in Linux e penso che MacOS e I credano in Control-Z e in Windows. Se vuoi controllare per entrare (o più specificatamente, due entrano ... uno per finire l'ultima riga e uno per indicare che hai finito, che è essenzialmente come http gestisce la determinazione quando le intestazioni http sono finite ed è ora di il corpo http, quindi la soluzione di @dbank dovrebbe essere un'opzione praticabile con una correzione minore che cercherò di fare per spostare il predicato while al posto di! while.
(Modifica n. 2: realizzato readLine rimuove la newline, quindi una riga vuota "" invece di una nuova riga, quindi ora il mio codice devolve ad un'altra risposta con il bit EOF come risposta invece del commento)
Modifica ... è strano, @dbank aveva rispose mentre stavo scrivendo la mia risposta, e mi sarei fermato se non avessi menzionato l'alternativa EOF. de dalla memoria con la modifica che stava per fare:
InputStreamReader instream = new InputStreamReader(System.in);
BufferedReader buffer = new BufferedReader(instream);
line= buffer.readLine();
while (line != null && !line.equals("")){
length = length + line.length();
line= buffer.readLine();
}
quando si preme solo entrare 'Line' sarà uguale a "" non nullo. prova a cambiare 'line! = null' in'! line.equals ("") ' – StephenButtolph
Inoltre, solo per fornire alcuni altri pareri (es. usando un ciclo for), http://codereview.stackexchange.com/questions/44135/ is-it-ok-to-use-while-line-r-readline-null-construct – Foon
Mi sono reso conto ieri sera mentre mi stavo addormentando: per cosa stai usando la lunghezza? NB che se tu dovessi fare cat myfile | java yourprogram e stampa il valore della lunghezza, questo non sarà d'accordo con cosa, ad es. wc stampa fuori, perché non stai contando i newline. Se hai bisogno di farlo, nota che i file DOS avranno "\ r \ n" e che i file UNIX avranno "\ n" e il mio suggerimento originale di usare System.getProperty ("line.separator") probabilmente non funzionerà perché non c'è garanzia che tu non sia eg cercando di leggere un file DOS sotto Linux. (Quindi, spero che non sia quello che sei cattivo da fare) – Foon