Continually read the lines being appended to a log file - java

Concerning my previous question , I found out that maven can't really output jboss console. So I thought I'd like to make workaround it. Here is the deal:
While jboss is running, it writes console logs into server.log file, so I'm trying to retrieve the data as it comes in, because every few seconds the file is changes/updated by jboss I've encountered some difficulties so I need help.
What I actually need is:
read file server.log
when server.log is changed with adding few more lines output the change
Here is the code so far I got, there is a problem with it, it runs indefinitely and it starts every time from the beginning of the file, I'd like it to continue printing just the new lines from server.log. Hope it makes some sense here is the code:
import java.io.*;
class FileRead
{
public static void main(String args[])
{
try{
for(;;){ //run indefinitely
// Open the file
FileInputStream fstream = new FileInputStream("C:\\jboss-5.1.0.GA\\server\\default\\log\\server.log");
BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
String strLine;
//Read File Line By Line
while ((strLine = br.readLine()) != null) {
// Print the content on the console
System.out.println (strLine);
}
//Close the input stream
in.close();
}
}
catch (Exception e){//Catch exception if any
System.err.println("Error: " + e.getMessage());
}
}
}
According to the Montecristo suggestion I did this :
import java.io.*;
class FileRead {
public static void main(String args[]) {
try {
// Open the file that is the first
// command line parameter
FileInputStream fstream = new FileInputStream(
"C:\\jboss-5.1.0.GA\\server\\default\\log\\server.log");
BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
String line;
// Read File Line By Line
while ((line = br.readLine()) != null) {
// Print the content on the console
line = br.readLine();
if (line == null) {
Thread.sleep(1000);
} else {
System.out.println(line);
}
}
// Close the input stream
in.close();
} catch (Exception e) {// Catch exception if any
System.err.println("Error: " + e.getMessage());
}
}
}
And it still not working, it just printed the original file.. although the file changes constantly nothing happens.. nothing gets printed out except the original log file.
HERE IS THE SOLUTION: tnx Montecristo
import java.io.*;
class FileRead {
public static void main(String args[]) {
try {
FileInputStream fstream = new FileInputStream(
"C:\\jboss-5.1.0.GA\\server\\default\\log\\server.log");
BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
String line;
while (true) {
line = br.readLine();
if (line == null) {
Thread.sleep(500);
} else {
System.out.println(line);
}
}
} catch (Exception e) {
System.err.println("Error: " + e.getMessage());
}
}
}
Also see :
http://vanillajava.blogspot.co.uk/2012/08/java-memes-which-refuse-to-die.html

I don't know if you're going in the right direction but if I've understood correctly you'll find this useful: java-io-implementation-of-unix-linux-tail-f

You can use RandomAccessFile.
import java.io.IOException;
import java.io.RandomAccessFile;
public class LogFileReader {
public static void main( String[] args ) {
String fileName = "abc.txt";
try {
RandomAccessFile bufferedReader = new RandomAccessFile( fileName, "r"
);
long filePointer;
while ( true ) {
final String string = bufferedReader.readLine();
if ( string != null )
System.out.println( string );
else {
filePointer = bufferedReader.getFilePointer();
bufferedReader.close();
Thread.sleep( 2500 );
bufferedReader = new RandomAccessFile( fileName, "r" );
bufferedReader.seek( filePointer );
}
}
} catch ( IOException | InterruptedException e ) {
e.printStackTrace();
}
}
}

Related

Create multiple files from one text file in java

I have one input.txt file which consist on let suppose 520 lines.
I have to make a code in java which will act like this.
Create first file named file-001.txt from first 200 lines. then create another file-002 from 201-400 lines. then file-003.txt from remaining lines.
I have coded this, it just write first 200 lines. What changes I need to make in order to update its working to above scenario.
public class DataMaker {
public static void main(String args[]) throws IOException{
DataMaker dm=new DataMaker();
String file= "D:\\input.txt";
int roll=1;
String rollnum ="file-00"+roll;
String outputfilename="D:\\output\\"+rollnum+".txt";
String urduwords;
String path;
ArrayList<String> where = new ArrayList<String>();
int temp=0;
try(BufferedReader br = new BufferedReader(new FileReader(file))) {
for(String line; (line = br.readLine()) != null; ) {
++temp;
if(temp<201){ //may be i need some changes here
dm.filewriter(line+" "+temp+")",outputfilename);
}
}
} catch (FileNotFoundException e) {
System.out.println("File not found");
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
void filewriter(String linetoline,String filename) throws IOException{
BufferedWriter fbw =null;
try{
OutputStreamWriter writer = new OutputStreamWriter(
new FileOutputStream(filename, true), "UTF-8");
fbw = new BufferedWriter(writer);
fbw.write(linetoline);
fbw.newLine();
}catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
finally {
fbw.close();
}
}
}
One way can be use of if else but I cant just use it because my actual file is 6000+ lines.
I want this code to work like I run the code and give me 30+ output files.
You can change the following bit:
if(temp<201){ //may be i need some changes here
dm.filewriter(line+" "+temp+")",outputfilename);
}
to this:
dm.filewriter(line, "D:\\output\\file-00" + ((temp/200)+1) + ".txt");
This will make sure first 200 lines go to first file, next 200 lines go to next file and so on.
Also, you might want to batch 200 lines together and write them in one go rather than creating a writer everytime and write to file.
You may have a method that creates the Writer to the current File, reads up to limit number of lines, closes the Writer to the current File, then returns true if it had enough to read , false if it couldn't read the limit number of lines (i.e, abort next call, don't attempt to read more lines or write next file).
Then you would call this in a loop , passing the Reader, the new file name, and the limit number.
Here is an example :
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.OutputStreamWriter;
public class DataMaker {
public static void main(final String args[]) throws IOException {
DataMaker dm = new DataMaker();
String file = "D:\\input.txt";
int roll = 1;
String rollnum = null;
String outputfilename = null;
boolean shouldContinue = false;
try (BufferedReader br = new BufferedReader(new FileReader(file))) {
do {
rollnum = "file-00" + roll;
outputfilename = "D:\\output\\" + rollnum + ".txt";
shouldContinue = dm.fillFile(outputfilename, br, 200);
roll++;
} while (shouldContinue);
} catch (FileNotFoundException e) {
System.out.println("File not found");
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private boolean fillFile(final String outputfilename, final BufferedReader reader, final int limit)
throws IOException {
boolean result = false;
String line = null;
BufferedWriter fbw = null;
int temp = 0;
try {
OutputStreamWriter writer = new OutputStreamWriter(
new FileOutputStream(outputfilename, true), "UTF-8");
fbw = new BufferedWriter(writer);
while (temp < limit && ((line = reader.readLine()) != null)) {
temp++;
fbw.write(line);
fbw.newLine();
}
// abort if we didn't manage to read the "limit" number of lines
result = (temp == limit);
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
} finally {
fbw.close();
}
return result;
}
}

BufferedReader sets the text file null

I am trying to simply read in a line from a text file using BufferedReader. Here is the sample code:
try {
BufferedReader reader = new BufferedReader( new FileReader( "data.txt") );
while(reader.readLine() != null )
{
System.out.println(reader.readLine())
}
}
} catch (Exception e) {
e.printStackTrace();
}
The code above seems to not only print out null, but sets the data.txt file to null (as in, the file data.txt would initially have 40kb, and a call to readLine() sets it to 0kb)?
I have no idea why this is occurring, it can locate the file, but sets the file to null?
Can anyone identify why this is occurring?
Thanks.
EDIT !!
The BufferedWriter code is below:
try{
BufferedWriter writer = new BufferedWriter(new FileWriter("data.txt"))
for(int x=0; x<64; x++)
{
writer.write(String.valueOf(data[x]));
}
writer.newLine();
writer.newLine();
}
catch(IOException io)
{};
Not sure why your file contents gets erased however you need to change your while loop to this since you're skipping lines if you use your code.
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
Your first readline() is used as while loop condition. Then you write the second readline() to System.out. So you're writing every 2nd line. What you need is this.
String str = null;
while((str=reader.readLine()) != null) {
System.out.println(str);
}
You are printing every second line only, and may also print the end of file null terminator. This is because the while conditional reads the line from your file as well, and that you simply discard this line after checking against null.
Retain the line value in the variable:
String s;
while( (s = reader.readLine()) != null )
{
System.out.println(s);
}
Here's a working sample, similar to your original. Note that closing resources is very important:
import java.io.*;
import java.util.*;
public class ReadFile
{
public static final void main(String[] argv)
{
String fileName="data-2.txt";
writeFile(fileName);
readFile(fileName);
}
private static void writeFile(String fileName)
{
BufferedWriter writer = null;
try
{
writer = new BufferedWriter(new FileWriter(fileName));
for(int x=0; x<64; x++)
{
writer.write("some data\n");
}
writer.newLine();
writer.newLine();
}
catch(IOException x)
{
x.printStackTrace();
}
finally
{
safeClose(writer);
}
}
private static void readFile(String fileName)
{
BufferedReader reader = null;
String line = null;
try
{
reader = new BufferedReader( new FileReader( fileName ));
while((line = reader.readLine()) != null)
{
System.out.println(line);
}
}
catch(IOException x)
{
x.printStackTrace();
}
finally
{
safeClose(reader);
}
}
private static void safeClose(Closeable closeable)
{
if(null != closeable)
{
try
{
closeable.close();
}
catch(IOException x)
{
//ignore -x.printStackTrace()
}
}
}
}
you are reading one line in while loop and then again reading next line in println statement. that means you are when you check the condition that time reader.readLine() does not equal to null, but when you read in println then it become null .`
while(reader.readLine() != null )
{
System.out.println(reader.readLine())
}
you should write your code in this way:
String line = null;
while((line=reader.readLine()) != null)
{
System.out.println(line) ;
}
did you close your writer object? you should close your writer object inside finally block this way.
this might help you to resolve your problem.
finally
{
if(null != writer)
{
try
{
writer.close();
}
catch(IOException ioException)
{
}
}
}

java serialization and deserializaion

I have created a simple program that serializes String input from cmd to a .ser file.. Part of the requirement is that the program must be able to append new input and be able to read the new input plus the old input.. But i get StreamCorruptedException if i read after the 2nd input..
here is my run on the CMD.. how do I solve this StreamCorruptedException and Why does it happen??. codes are given below.
C:\Users\MSI\Desktop\Codes For Java>java WriteFile cc.ser
Enter text and press ^Z or ^D to end.
hah
haha
hahaha
try
^Z
C:\Users\MSI\Desktop\Codes For Java>java WriteFile cc.ser
Enter text and press ^Z or ^D to end.
asd
asd
asd
asd
asd
^Z
C:\Users\MSI\Desktop\Codes For Java>java ReadFile cc.ser
1: haha
2: haha
3: hahaha
4: hahaha
The Error is :
java.io.StreamCorruptedException: invalid type code: AC
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1375)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
at ReadFile.main(ReadFile.java:23)
WriteFile.java:
import java.io.*;
public class WriteFile implements java.io.Serializable
{
public static void main(String args[])
{
try
{
File myFile = new File(args[0]);
BufferedReader br = new BufferedReader
(new InputStreamReader(System.in));
ObjectOutputStream oos = new ObjectOutputStream
(new FileOutputStream(myFile,true));
System.out.println("Enter text and press ^Z or ^D to end.");
String str;
while ((str = br.readLine()) != null)
{
oos.writeObject(str);
}
br.close();
oos.close();
}
catch (IOException i)
{
i.printStackTrace();
}
}}
ReadFile.java:
import java.io.*;
public class ReadFile
{
public static void main(String args[])
{
try
{
int ctr = 0;
File myFile = new File(args[0]);
ObjectInputStream OIS = new ObjectInputStream
(new FileInputStream( myFile ));
String str;
while ((str = (String)OIS.readObject()) != null)
{
System.out.println(++ctr + ": " + str);
}
OIS.close();
}
catch (EOFException ex)
{
System.out.println("\nEnd of File Reached ");
}
catch (ClassNotFoundException c)
{
System.out.println("The Error is : ");
c.printStackTrace();
}catch (IOException i)
{
System.out.println("The Error is : ");
i.printStackTrace();
}
}}
This exception occurs whenever u are trying to create a new OutputStream Object for an existing input stream/trying to read even before something is written in which case ,the control information that was read from an object stream violates internal consistency checks.
Use a single OOS and OIS for the life of the socket, and don't use any other streams on the socket.
Also u might want to implement the same using threads in the same program.
If you want to forget what you've written, use ObjectOutputStream.reset().
I think this problem occurs because u are trying to read even before it is written .
i edited my code after reading some answer to this question Appending to an ObjectOutputStream
import java.io.*;
public class WriteFile
implements java.io.Serializable
{
public static void main(String args[])
{
try
{
File myFile = new File(args[0]);
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
if (myFile.exists())
{
AppendingObjectOutputStream AOOS = new AppendingObjectOutputStream(new FileOutputStream(myFile,true));
System.out.println("Enter text and press ^Z or ^D to end.");
String str;
while ((str = br.readLine()) != null)
{
AOOS.writeObject(str);
}
br.close();
AOOS.flush();
}
else
{
ObjectOutputStream OOS = new ObjectOutputStream(new FileOutputStream(myFile,true));
System.out.println("Enter text and press ^Z or ^D to end.");
String str;
while ((str = br.readLine()) != null)
{
OOS.writeObject(str);
}
br.close();
OOS.flush();
}
}
catch (IOException i)
{
i.printStackTrace();
}
}}
and adding a new class from the question mentioned above
public class AppendingObjectOutputStream extends ObjectOutputStream {
public AppendingObjectOutputStream(OutputStream out) {
super(out);
}
#Override
protected void writeStreamHeader() throws IOException {
// do not write a header, but reset:
// this line added after another question
// showed a problem with the original
reset();
}}
any suggestion to better improve this code? sorry just a newbie to java programming
here was my new run on the CMD
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\Users\MSI>cmd
'cmd' is not recognized as an internal or external command,
operable program or batch file.
C:\Users\MSI\Desktop\Codes For Java>java WriteFile haha.ser
Enter text and press ^Z or ^D to end.
a
b
c
d
^Z
C:\Users\MSI\Desktop\Codes For Java>java WriteFile haha.ser
Enter text and press ^Z or ^D to end.
e
f
g
^Z
C:\Users\MSI\Desktop\Codes For Java>java ReadFile haha.ser
1: a
2: b
3: c
4: d
5: e
6: f
7: g
End of File Reached
i did'nt change my readfile.java file... thanks for the answers =D
A couple of questions you need to be clear before heading into your code and fix your coding issue.
1) Why do you need to use ObjectInputStream and ObjectOutputStream? If you are just read and write string, better to use BufferedWriter and BufferedReader. We only use OIS and OOS to read and write object.
2) Your question is nothing related to the Serialization and De-serialization . Please do a google search to see how to do the proper serialize and de-serialize. In your code snippet:
public class WriteFile implements java.io.Serializable // there is no meaning to implement the mark up interface here.
In short, only mark java.io.Serializable on a POJO or data object.
3) When you type ctrl-c or ctrl-z, there is a system interrupt signal triggered, the whole system will stop abruptly, that will cause the corruption of the data writing.
I spent a bit of time to write a complete working sample for you. Hopefully you can get sth from my sample.
ConsoleWriter
/**
* Write Console String to a file
* When you type quit or save it will write to the file in one go.
*
* #author Seabook Chen
*
*/
public class SimpleConsoleWriter {
private static final String NEW_LINE = System.getProperty("line.separator");
public static void main(String[] args) {
if (args == null || args.length == 0) {
throw new RuntimeException("Please specify the file name!!!");
}
String filepath = args[0];
Scanner in = new Scanner(System.in);
System.out.println("Please input your comments ....");
System.out.println("Type quit to finish the input! Please type exact quit to quit!!!");
System.out.println("Type save to write to the file you specified. ");
StringBuilder sb = new StringBuilder();
while(true) {
String input = in.nextLine();
if ("quit".equalsIgnoreCase(input) || "save".equalsIgnoreCase(input)) {
System.out.println("Thanks for using the program!!!");
System.out.println("Your input is stored in " + filepath);
break;
}
sb.append(input);
sb.append(NEW_LINE);
}
FileWriter fw = null;
BufferedWriter bw = null;
try {
fw = new FileWriter(filepath, true);
bw = new BufferedWriter(fw);
bw.write(sb.toString(), 0, sb.toString().length());
bw.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fw != null) {
try {
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (bw != null) {
try {
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
SimpleConsoleReader
/**
* Read a file and output in the console
*
* #author Seabook Chen
*
*/
public class SimpleConsoleReader {
public static void main(String[] args) {
if (args == null || args.length == 0) {
throw new RuntimeException("Please specify the file name!!!");
}
File file = new File(args[0]);
FileReader fr = null;
BufferedReader br = null;
String nextLine = null;
try {
fr = new FileReader(file);
br = new BufferedReader(fr);
while((nextLine = br.readLine()) != null ) {
System.out.println(nextLine);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fr != null) {
try {
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}

Java : Can't capture console output of a console program (Blockland.exe)

I'm trying to capture the output of a console program and write overwriting lines of the output to a file which another program will read, line by line I write into this file (the file should only contain one line at a time) but when I made this code and tried running it, it didn't work. The process started perfectly, but the file is not being created, written to, and I am not getting any System.out.println's of "Streaming : blah blah blah"
You can read the code below or use this pastebin : http://pastebin.com/raw.php?i=Yahsqxma
import java.io.*;
import java.util.Scanner;
public class OpenRC {
static BufferedReader consoleInput = null;
static String os = System.getProperty("os.name").toLowerCase();
static Process server;
public static void main(String[] args) throws IOException {
// OpenRC by Pacnet2013
System.out.println(System.getProperty("user.dir"));
if(os.indexOf("win") >= 0) {
os = "Windows";
}
else if(os.indexOf("mac") >= 0) {
os = "Mac";
}
else if(os.indexOf("nux") >= 0) {
os = "Linux";
}
switch(os){
case "Linux" : //cause I need WINE
File file = new File(System.getProperty("user.dir") + "/OpenRC.txt");
try {
Scanner scanner = new Scanner(file);
String path = scanner.nextLine();
System.out.println("Got BlocklandEXE - " + path);
String port = scanner.nextLine();
System.out.println("Got port - " + port);
scanner.close();
server = new ProcessBuilder("wine", path + "Blockland.exe", "ptlaaxobimwroe", "-dedicated", "-port" + port).start();
if(consoleInput != null)
consoleInput.close();
consoleInput = new BufferedReader(new InputStreamReader(server.getInputStream()));
streamLoop();
} catch (FileNotFoundException e) {
System.out.println("You don't have an OpenRC Config file OpenRC.txt in the directory of this program");
}
}
}
public static void streamConsole()
{
String line = "";
int numLines = 0;
try
{
if (consoleInput != null)
{
while((line = consoleInput.readLine()) != null && consoleInput.ready())
{
numLines++;
}
}
}
catch (IOException e)
{
System.out.println("There may be a problem - An IOException (java.io.IOException) was caught so some lines may not display / display correctly");
}
if(!line.equals("") && !(line == null))
{
System.out.println("Streaming" + numLines + line);
writeToFile(System.getProperty("user.dir"), line);
}
}
public static void streamLoop()
{
try
{
Thread.sleep(5000);
}
catch (InterruptedException e)
{
System.out.println("A slight problem may have happened while trying to read a command");
}
streamConsole();
streamLoop(); //it'll go on until you close this program
}
public static void writeToFile(String filePath, String content)
{
try {
File file = new File(filePath);
if (!file.exists()) {
file.createNewFile();
System.out.println("Creating new stream text file");
}
FileWriter writer = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(writer);
bw.write(content);
bw.close();
System.out.println("Wrote stream text file");
} catch (IOException e) {
e.printStackTrace();
}
}
}
You are running a DOS console application, which does not necessarily write to stdout or stderr, but it writes to the "console". It's nearly impossible to capture the "console" output reliably. The only tool that I have ever seen that is able to capture console output is expect by Don Libes, and that does all sorts of hacks.

Read data from a text file using Java

I need to read a text file line by line using Java. I use available() method of FileInputStream to check and loop over the file. But while reading, the loop terminates after the line before the last one. i.e., if the file has 10 lines, the loop reads only the first 9 lines.
Snippet used :
while(fis.available() > 0)
{
char c = (char)fis.read();
.....
.....
}
You should not use available(). It gives no guarantees what so ever. From the API docs of available():
Returns an estimate of the number of bytes that can be read (or skipped over) from this input stream without blocking by the next invocation of a method for this input stream.
You would probably want to use something like
try {
BufferedReader in = new BufferedReader(new FileReader("infilename"));
String str;
while ((str = in.readLine()) != null)
process(str);
in.close();
} catch (IOException e) {
}
(taken from http://www.exampledepot.com/egs/java.io/ReadLinesFromFile.html)
How about using Scanner? I think using Scanner is easier
private static void readFile(String fileName) {
try {
File file = new File(fileName);
Scanner scanner = new Scanner(file);
while (scanner.hasNextLine()) {
System.out.println(scanner.nextLine());
}
scanner.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
Read more about Java IO here
If you want to read line-by-line, use a BufferedReader. It has a readLine() method which returns the line as a String, or null if the end of the file has been reached. So you can do something like:
BufferedReader reader = new BufferedReader(new InputStreamReader(fis));
String line;
while ((line = reader.readLine()) != null) {
// Do something with line
}
(Note that this code doesn't handle exceptions or close the stream, etc)
String file = "/path/to/your/file.txt";
try {
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
String line;
// Uncomment the line below if you want to skip the fist line (e.g if headers)
// line = br.readLine();
while ((line = br.readLine()) != null) {
// do something with line
}
br.close();
} catch (IOException e) {
System.out.println("ERROR: unable to read file " + file);
e.printStackTrace();
}
You can try FileUtils from org.apache.commons.io.FileUtils, try downloading jar from here
and you can use the following method:
FileUtils.readFileToString("yourFileName");
Hope it helps you..
The reason your code skipped the last line was because you put fis.available() > 0 instead of fis.available() >= 0
In Java 8 you could easily turn your text file into a List of Strings with streams by using Files.lines and collect:
private List<String> loadFile() {
URI uri = null;
try {
uri = ClassLoader.getSystemResource("example.txt").toURI();
} catch (URISyntaxException e) {
LOGGER.error("Failed to load file.", e);
}
List<String> list = null;
try (Stream<String> lines = Files.lines(Paths.get(uri))) {
list = lines.collect(Collectors.toList());
} catch (IOException e) {
LOGGER.error("Failed to load file.", e);
}
return list;
}
//The way that I read integer numbers from a file is...
import java.util.*;
import java.io.*;
public class Practice
{
public static void main(String [] args) throws IOException
{
Scanner input = new Scanner(new File("cards.txt"));
int times = input.nextInt();
for(int i = 0; i < times; i++)
{
int numbersFromFile = input.nextInt();
System.out.println(numbersFromFile);
}
}
}
Try this just a little search in Google
import java.io.*;
class FileRead
{
public static void main(String args[])
{
try{
// Open the file that is the first
// command line parameter
FileInputStream fstream = new FileInputStream("textfile.txt");
// Get the object of DataInputStream
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String strLine;
//Read File Line By Line
while ((strLine = br.readLine()) != null) {
// Print the content on the console
System.out.println (strLine);
}
//Close the input stream
in.close();
}catch (Exception e){//Catch exception if any
System.err.println("Error: " + e.getMessage());
}
}
}
Try using java.io.BufferedReader like this.
java.io.BufferedReader br = new java.io.BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream(fileName)));
String line = null;
while ((line = br.readLine()) != null){
//Process the line
}
br.close();
Yes, buffering should be used for better performance.
Use BufferedReader OR byte[] to store your temp data.
thanks.
user scanner it should work
Scanner scanner = new Scanner(file);
while (scanner.hasNextLine()) {
System.out.println(scanner.nextLine());
}
scanner.close();
public class ReadFileUsingFileInputStream {
/**
* #param args
*/
static int ch;
public static void main(String[] args) {
File file = new File("C://text.txt");
StringBuffer stringBuffer = new StringBuffer("");
try {
FileInputStream fileInputStream = new FileInputStream(file);
try {
while((ch = fileInputStream.read())!= -1){
stringBuffer.append((char)ch);
}
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("File contents :");
System.out.println(stringBuffer);
}
}
public class FilesStrings {
public static void main(String[] args) throws FileNotFoundException, IOException {
FileInputStream fis = new FileInputStream("input.txt");
InputStreamReader input = new InputStreamReader(fis);
BufferedReader br = new BufferedReader(input);
String data;
String result = new String();
while ((data = br.readLine()) != null) {
result = result.concat(data + " ");
}
System.out.println(result);
File file = new File("Path");
FileReader reader = new FileReader(file);
while((ch=reader.read())!=-1)
{
System.out.print((char)ch);
}
This worked for me
Simple code for reading file in JAVA:
import java.io.*;
class ReadData
{
public static void main(String args[])
{
FileReader fr = new FileReader(new File("<put your file path here>"));
while(true)
{
int n=fr.read();
if(n>-1)
{
char ch=(char)fr.read();
System.out.print(ch);
}
}
}
}

Categories