In this article, we are going to learn How to Read text File word by word in C. We will read each word from the text file in each iteration.
C fscanf Function
The fscanf() function is available in the C library. This function is used to read formatted input from a stream. The syntax of the fscanf function is:
Syntax
int fscanf(FILE *stream, const char *format, ...)
Parameters :
- stream − This is the pointer to a FILE object that identifies the stream.
- format − This is the C string that contains one or more of the following items − Whitespace character, Non-whitespace character, and Format specifiers.
- A format specifier will be as [=%[*][width][modifiers]type=].
1. Read File Word by Word in C using fscanf Function
Here we are making use of the fscanf function to read the text file. The first thing we are going to do is open the file in reading mode. So using fopen() function and “r” read mode we opened the file. The next step is to find the file stats like what is the size of the data this file contains. so we can allocate exact memory for the buffer that is going to hold the content of this file. We are using the stat() function to find the file size.
- Once we have the size and buffer allocated for this size, we start reading the file by using the fscanf() function.
- We keep reading the file word by word until we reach the end of file.In fscanf function, we are passing “%39[^-n] as the argument so we can read the text until we find the next word.
- The code will look like this:
fscanf(in_file, "%39[^-n]", file_contents)
C Program to Read text File word by word
To run this program, we need one text file with the name Readme.txt in the same folder where we have our code.The content of the file is:
Hello My name is John danny
#include <stdio.h> #include <stdlib.h> #include <sys/stat.h> const char* filename = "Readme.txt"; int main(int argc, char *argv[]) { FILE *in_file = fopen(filename, "r"); if (!in_file) { perror("fopen"); return 0; } struct stat sb; if (stat(filename, &sb) == -1) { perror("stat"); return 0; } char *file_contents = malloc(sb.st_size); while (fscanf(in_file, "%[^-n ] ", file_contents) != EOF) { printf("> %sn", file_contents); } fclose(in_file); return 0; }
Output
Hello My name is John danny
Like the title says, im trying to write a program that can read individual words from a text file and store them to String
variables. I know how to use a FileReader
or FileInputStream
to read a single char
but for what I’m trying to this wont work. Once I input the words I am trying to compare these with other String variables in my program using .equals so it would be best if I can import as Strings. I am also okay with inputting an entire line from a text file as a String in which case Ill just put one word on each line of my file. How do I input words from a text file and store them to String variables?
EDIT:
Okay, that duplicate sort of helps. It might work for me but the reason my question is a little different is because the duplicate only tells how to read a single line. Im trying to read the individual words in the line. So basically splitting the line String.
asked Jul 12, 2015 at 18:06
Ashwin GuptaAshwin Gupta
2,1589 gold badges30 silver badges60 bronze badges
3
These are all really complex answers. And I am sure they are all useful. But I prefer the elegantly simple Scanner
:
public static void main(String[] args) throws Exception{
Scanner sc = new Scanner(new File("fileName.txt"));
while(sc.hasNext()){
String s = sc.next();
//.....
}
}
answered Jul 12, 2015 at 18:24
MishaMisha
1901 silver badge9 bronze badges
1
To read lines from a text file, you can use this (uses try-with-resources):
String line;
try (
InputStream fis = new FileInputStream("the_file_name");
InputStreamReader isr = new InputStreamReader(fis, Charset.forName("UTF-8"));
BufferedReader br = new BufferedReader(isr);
) {
while ((line = br.readLine()) != null) {
// Do your thing with line
}
}
More compact, less-readable version of the same thing:
String line;
try (BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("the_file_name"), Charset.forName("UTF-8")))) {
while ((line = br.readLine()) != null) {
// Do your thing with line
}
}
To chunk a line into individual words, you can use String.split:
while ((line = br.readLine()) != null) {
String[] words = line.split(" ");
// Now you have a String array containing each word in the current line
}
answered Jul 12, 2015 at 18:14
sporkspork
1,1751 gold badge11 silver badges16 bronze badges
1
You must use StringTokenizer! here an example and read this String Tokenizer
private BufferedReader innerReader;
public void loadFile(Reader reader)
throws IOException {
if(reader == null)
{
throw new IllegalArgumentException("Reader not valid!");
}
this.innerReader = new BufferedReader(reader);
String line;
try
{
while((line = innerReader.readLine()) != null)
{
if (line == null || line.trim().isEmpty())
throw new IllegalArgumentException(
"line empty");
//StringTokenizer use delimiter for split string
StringTokenizer tokenizer = new StringTokenizer(line, ","); //delimiter is ","
if (tokenizer.countTokens() < 4)
throw new IllegalArgumentException(
"Token number not valid (<= 4)");
//You can change the delimiter if necessary, string example
/*
Hello / bye , hi
*/
//reads up "/"
String hello = tokenizer.nextToken("/").trim();
//reads up ","
String bye = tokenizer.nextToken(",").trim();
//reads up to end of line
String hi = tokenizer.nextToken("nr").trim();
//if you have to read but do not know if there will be a next token do this
while(tokenizer.hasMoreTokens())
{
String mayBe = tokenizer.nextToken(".");
}
}
} catch (Exception e) {
throw new IllegalArgumentException(e);
}
}
answered Jul 12, 2015 at 18:13
Michele LacorteMichele Lacorte
5,2637 gold badges32 silver badges53 bronze badges
3
In java8 you can do something like the following:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
public class Foo {
public List<String> readFileIntoListOfWords() {
try {
return Files.readAllLines(Paths.get("somefile.txt"))
.stream()
.map(l -> l.split(" "))
.flatMap(Arrays::stream)
.collect(Collectors.toList());
}
catch (IOException e) {
e.printStackTrace();
}
return Collections.emptyList();
}
}
Though I suspect that the argument to split may need to be changed, eg to trim punctuation from the end of a word
answered Jul 12, 2015 at 18:31
beresfordtberesfordt
5,06810 gold badges34 silver badges43 bronze badges
Improve Article
Save Article
Like Article
Improve Article
Save Article
Like Article
Prerequisites: File Handling in Python Given a text file and the task is to read the information from file word by word in Python. Examples:
Input: I am R2J! Output: I am R2J! Input: Geeks 4 Geeks And in that dream, we were flying. Output: Geeks 4 Geeks And in that dream, we were flying.
Approach:
- Open a file in read mode which contains a string.
- Use for loop to read each line from the text file.
- Again use for loop to read each word from the line splitted by ‘ ‘.
- Display each word from each line in the text file.
Example 1: Let’s suppose the text file looks like this – Text File:
Python3
with
open
(
'GFG.txt'
,
'r'
) as
file
:
for
line
in
file
:
for
word
in
line.split():
print
(word)
Output:
Geeks 4 geeks
Time Complexity: O(n), where n is the total number of words in the file.
Auxiliary Space: O(1), as the program is reading and displaying each word one by one without storing any additional data.
Example 2: Let’s suppose the text file contains more than one line. Text file:
Python3
with
open
(
'GFG.txt'
,
'r'
) as
file
:
for
line
in
file
:
for
word
in
line.split():
print
(word)
Output:
Geeks 4 Geeks And in that dream, we were flying.
Time complexity: O(n), where n is the total number of words in the file.
Auxiliary space: O(1), as only a constant amount of extra space is used to store each word temporarily while printing it.
Like Article
Save Article
This post will talk about how to read Word Documents with Python. We’re going to cover three different packages – docx2txt, docx, and my personal favorite: docx2python.
The docx2txt package
Let’s talk about docx2text first. This is a Python package that allows you to scrape text and images from Word Documents. The example below reads in a Word Document containing the Zen of Python. As you can see, once we’ve imported docx2txt, all we need is one line of code to read in the text from the Word Document. We can read in the document using a method in the package called process, which takes the name of the file as input. Regular text, listed items, hyperlink text, and table text will all be returned in a single string.
import docx2txt # read in word file result = docx2txt.process("zen_of_python.docx")
What if the file has images? In that case we just need a minor tweak to our code. When we run the process method, we can pass an extra parameter that specifies the name of an output directory. Running docx2txt.process will extract any images in the Word Document and save them into this specified folder. The text from the file will still also be extracted and stored in the result variable.
import docx2txt result = docx2txt.process("zen_of_python_with_image.docx", "C:/path/to/store/files")
Sample Image
docx2txt will also scrape any text from tables. Again, this will be returned into a single string with any other text found in the document, which means this text can more difficult to parse. Later in this post we’ll talk about docx2python, which allows you to scrape tables in a more structured format.
The docx package
The source code behind docx2txt is derived from code in the docx package, which can also be used to scrape Word Documents. docx is a powerful library for manipulating and creating Word Documents, but can also (with some restrictions) read in text from Word files.
In the example below, we open a connection to our sample word file using the docx.Document method. Here we just input the name of the file we want to connect to. Then, we can scrape the text from each paragraph in the file using a list comprehension in conjunction with doc.paragraphs. This will include scraping separate lines defined in the Word Document for listed items. Unlike docx2txt, docx, cannot scrape images from Word Documents. Also, docx will not scrape out hyperlinks and text in tables defined in the Word Document.
import docx # open connection to Word Document doc = docx.Document("zen_of_python.docx") # read in each paragraph in file result = [p.text for p in doc.paragraphs]
The docx2python package
docx2python is another package we can use to scrape Word Documents. It has some additional features beyond docx2txt and docx. For example, it is able to return the text scraped from a document in a more structured format. Let’s test out our Word Document with docx2python. We’re going to add a simple table in the document so that we can extract that as well (see below).
docx2python contains a method with the same name. If we call this method with the document’s name as input, we get back an object with several attributes.
from docx2python import docx2python # extract docx content doc_result = docx2python('zen_of_python.docx')
Each attribute provides either text or information from the file. For example, consider that our file has three main components – the text containing the Zen of Python, a table, and an image. If we call doc_result.body, each of these components will be returned as separate items in a list.
# get separate components of the document doc_result.body # get the text from Zen of Python doc_result[0] # get the image doc_result[1] # get the table text doc_result[2]
Scraping a word document table with docx2python
The table text result is returned as a nested list, as you can see below. Each row (including the header) gets returned as a separate sub-list. The 0th element of the list refers to the header – or 0th row of the table. The next element refers to the next row in the table and so on. In turn, each value in a row is returned as an individual sub-list within that row’s corresponding list.
We can convert this result into a tabular format using pandas. The data frame is still a little messy – each cell in the data frame is a list containing a single value. This value also has quite a few “t”‘s (which represent tab spaces).
pd.DataFrame(doc_result.body[1][1:])
Here, we use the applymap method to apply the lambda function below to every cell in the data frame. This function gets the individual value within the list in each cell and removes all instances of “t”.
import pandas as pd pd.DataFrame(doc_result.body[1][1:]). applymap(lambda val: val[0].strip("t"))
Next, let’s change the column headers to what we see in the Word file (which was also returned to us in doc_result.body).
df.columns = [val[0].strip("t") for val in doc_result.body[1][0]]
Extracting images
We can extract the Word file’s images using the images attribute of our doc_result object. doc_result.images consists of a dictionary where the keys are the names of the image files (not automatically written to disk) and the corresponding values are the images files in binary format.
type(doc_result.images) # dict doc_result.images.keys() # dict_keys(['image1.png'])
We can write the binary-formatted image out to a physical file like this:
for key,val in doc_result.images.items(): f = open(key, "wb") f.write(val) f.close()
Above we’re just looping through the keys (image file names) and values (binary images) in the dictionary and writing each out to file. In this case, we only have one image in the document, so we just get one written out.
Other attributes
The docx2python result has several other attributes we can use to extract text or information from the file. For example, if we want to just get all of the file’s text in a single string (similar to docx2txt) we can run doc_result.text.
# get all text in a single string doc_result.text
In addition to text, we can also get metadata about the file using the properties attribute. This returns information such as the creator of the document, the created / last modified dates, and number of revisions.
doc_result.properties
If the document you’re scraping has headers and footers, you can also scrape those out like this (note the singular version of “header” and “footer”):
# get the headers doc_result.header # get the footers doc_result.footer
Footnotes can also be extracted like this:
doc_result.footnotes
Getting HTML returned with docx2python
We can also specify that we want to get an HTML object returned with the docx2python method that supports a few types of tags including font (size and color), italics, bold, and underline text. We just need to specify the parameter “html = True”. In the example below we see The Zen of Python in bold and underlined print. Corresponding to this, we can see the HTML version of this in the second snapshot below. The HTML feature does not currently support table-related tags, so I would recommend using the method we went through above if you’re looking to scrape tables from Word documents.
doc_html_result = docx2python('zen_of_python.docx', html = True)
Hope you enjoyed this post! Please check out other Python posts of mine below or by clicking here.
This tutorial explains how to read a text file and search any specific word in java. In order to search any specific word from a text file, we need to first read text file. Here we have provided simple example for reading a text file and search any specific word from that.
sample.txt
we are going to use below text file content using java code.
Simple Form Validation In Reactjs Example Create a Dropdown Menu using ReactJS Installing React Native on Windows Tutorial Create Dropdown Menu In React Native How To Customize Button In React Native Facebook loading animation using CSS3 Facebook Style Chat Application with jQuery and CSS Append Or Prepend HTML Using ReactJS Create Ripple Animation Effect Using Css Ripple Effect Animation On Button Click With CSS3
FileWordSearch.txt
package demo; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class FileWordSearch { public static void main(String[] args) throws IOException { // TODO Auto-generated method stub String[] words = null; // Intialize the word Array // Creation of File Descriptor for input file File f1 = new File("sample.txt"); // Creation of File Reader object FileReader fr = new FileReader(f1); // Creation of BufferedReader object BufferedReader br = new BufferedReader(fr); String s; String input = "Facebook"; // Input word to be searched int count = 0; // Intialize the word to zero // Reading Content from the file while ((s = br.readLine()) != null) { words = s.split(" "); // Split the word using space for (String word : words) { if (word.equals(input)) { // Search for the given word count++; // If Present increase the count by one } } } if (count != 0) { // Check for count not equal to zero System.out.println("The given word is present for " + count + " Times in the file"); } else { System.out.println("The given word is not present in the file"); } fr.close(); } }
Output:-
——————
This is all about Java Program to Search for a given word in a File. Thank you for reading this article, and if you have any problem, have a another better useful solution about this article, please write message in the comment section.
This post will discuss how to read all text from a file into a string in Java.
There are several ways to read the contents of a file into a string using Plain Java and third-party libraries such as Guava, Apache Commons IO, etc. Also, with the introduction of the Files class in Java 7, several static methods are included with each subsequent release that operate on files, directories, or other types of files. All these are discussed below in detail:
1. Using Java 7 (java.nio.file.Files.readAllBytes
)
To read all the bytes from a file, we can use the readAllBytes() method, which takes the path to the file and returns a byte array containing the bytes read from the file. To get output in the string format, pass the byte array to the String constructor with a charset for decoding.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
import java.io.File; import java.io.IOException; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; class Main { public static String readFile(String path, Charset encoding) throws IOException { byte[] encoded = Files.readAllBytes(Paths.get(path)); return new String(encoded, encoding); } public static void main(String[] args) { String filePath = «doc.txt»; String content = null; try { content = readFile(filePath, StandardCharsets.UTF_8); } catch (IOException e) { e.printStackTrace(); } System.out.println(content); } } |
Download Code
2. Using Java 7 (java.nio.file.Files.readAllLines
)
To read the contents of a file into a string, we can use the readAllLines() method, which takes the file’s path. It is overloaded to additionally accept the charset to be used for decoding.
This method is convenient to read all lines in a single operation but returns a list of strings and strips line terminators from the end of each line. We can easily handle this by joining each of the elements of the list with a line separator, as shown below:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
import java.io.IOException; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; import java.util.List; class Main { public static String readFile(String path, Charset encoding) throws IOException { List<String> lines = Files.readAllLines(Paths.get(path), encoding); return String.join(System.lineSeparator(), lines); } public static void main(String[] args) { String filePath = «doc.txt»; String content = null; try { content = readFile(filePath, StandardCharsets.UTF_8); } catch (IOException e) { e.printStackTrace(); } System.out.println(content); } } |
Download Code
3. Using Java 8 (java.nio.file.Files.lines
)
Java 8 introduced Files.lines() method, which can read all lines from a file as a stream. It takes the path to the file and overloaded it to accept the charset for decoding.
Like Files.readAllLines()
, Files.lines()
method doesn’t include line-termination characters, which can be handled explicitly, as shown below:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
import java.io.IOException; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; import java.util.stream.Collectors; class Main { public static String readFile(String path, Charset encoding) throws IOException { String content = Files.lines(Paths.get(path), encoding) .collect(Collectors.joining(System.lineSeparator())); return content; } public static void main(String[] args) { String filePath = «doc.txt»; String content = null; try { content = readFile(filePath, StandardCharsets.UTF_8); } catch (IOException e) { e.printStackTrace(); } System.out.println(content); } } |
Download Code
4. Using Java 8 (java.io.BufferedReader.lines
)
Java 8 also introduced BufferedReader.lines()
method, which returns a stream of lines of text read from BufferedReader
. This is demonstrated below using Stream:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.stream.Collectors; class Main { public static String readFile(String path) throws IOException { BufferedReader reader = new BufferedReader(new FileReader(new File(path))); return reader.lines().collect(Collectors.joining(System.lineSeparator())); } public static void main(String[] args) { String filePath = «doc.txt»; String content = null; try { content = readFile(filePath); } catch (IOException e) { e.printStackTrace(); } System.out.println(content); } } |
Download Code
5. Using Java 11 (java.nio.file.Files.readString
)
Java 11 introduced the Files.readString() method, which can read all characters from a file into a string. It takes a path to the file and overloaded to accept the charset used for decoding from bytes to characters.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
import java.io.IOException; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; class Main { public static String readFile(String path, Charset encoding) throws IOException { return Files.readString(Paths.get(path), encoding); } public static void main(String[] args) { String filePath = «doc.txt»; String content = null; try { content = readFile(filePath, StandardCharsets.UTF_8); } catch (IOException e) { e.printStackTrace(); } System.out.println(content); } } |
Download Code
6. Using Guava’s Files.asCharSource()
Several third-party libraries provide utility methods for working with files. Guava provides the Files.asCharSource() method, which can be used to read file contents into a string using the given character set, as shown below:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
import com.google.common.base.Charsets; import com.google.common.io.Files; import java.io.File; import java.io.IOException; import java.nio.charset.Charset; class Main { public static String readFile(String path, Charset encoding) throws IOException { return Files.asCharSource(new File(path), encoding).read(); } public static void main(String[] args) { String filePath = «doc.txt»; String content = null; try { content = readFile(filePath, Charsets.UTF_8); } catch (IOException e) { e.printStackTrace(); } System.out.println(content); } } |
Download Code
7. Using Guava’s Files.readLines()
If you prefer Google’s Guava library, you can use the Files.readLines(file, charset)
method reads all the lines from a file and returns a mutable List. For an ImmutableList
, use Files.asCharSource(file, charset).readLines()
. Note that both these methods strip line-termination characters from the end of each line.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
import com.google.common.base.Charsets; import com.google.common.base.Joiner; import com.google.common.io.Files; import java.io.File; import java.io.IOException; import java.nio.charset.Charset; import java.util.List; class Main { public static String readFile(String path, Charset encoding) throws IOException { List<String> lines = Files.readLines(new File(path), encoding); return Joiner.on(System.lineSeparator()).join(lines); } public static void main(String[] args) { String filePath = «doc.txt»; String content = null; try { content = readFile(filePath, Charsets.UTF_8); } catch (IOException e) { e.printStackTrace(); } System.out.println(content); } } |
Download Code
8. Using Apache Commons IO
Like Guava library, Apache Commons IO FileUtils
class provides the readFileToString() method that allows you to read the contents of any file into a string using the specified charset for converting Bytes from the file into characters.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
import org.apache.commons.io.FileUtils; import java.io.File; import java.io.IOException; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; class Main { public static String readFile(String path, Charset encoding) throws IOException { return FileUtils.readFileToString(new File(path), encoding); } public static void main(String[] args) { String filePath = «doc.txt»; String content = null; try { content = readFile(filePath, StandardCharsets.UTF_8); } catch (IOException e) { e.printStackTrace(); } System.out.println(content); } } |
Download Code
Alternatively, we can use IOUtils
class from Apache Commons IO library that has the toString() method. It takes an InputStream
and renders its contents as a String, as shown below:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
import org.apache.commons.io.IOUtils; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.nio.charset.StandardCharsets; class Main { public static void main(String[] args) { File file = new File(«demo.txt»); String fileContents; try (FileInputStream inputStream = new FileInputStream(file)) { fileContents = IOUtils.toString(inputStream, StandardCharsets.UTF_8); System.out.println(fileContents); } catch (IOException e) { e.printStackTrace(); } } } |
Download Code
9. Using Scanner
We can also construct a Scanner that produces values scanned from the specified file. This is demonstrated below using the try-with-resources block to automatically takes care of scanner.close()
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
import java.io.File; import java.io.IOException; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.util.Scanner; class Main { public static String readFile(String path, Charset encoding) throws IOException { String content; try (Scanner scanner = new Scanner(new File(path), String.valueOf(encoding))) { content = scanner.useDelimiter(«\A»).next(); } return content; } public static void main(String[] args) { String filePath = «doc.txt»; String content = null; try { content = readFile(filePath, StandardCharsets.UTF_8); } catch (IOException e) { e.printStackTrace(); } System.out.println(content); } } |
Download Code
10. Plain Java
In plain Java, we can open an input stream of bytes using InputStream
and keep reading bytes of data from it into a byte array using its read() method. Finally, to get output in the string format, pass the byte array to the String constructor with a charset for decoding.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; class Main { public static String readFile(String path, Charset encoding) throws IOException { File file = new File(path); InputStream in = new FileInputStream(file); byte[] bytes = new byte[(int)file.length()]; int offset = 0; while (offset < bytes.length) { int result = in.read(bytes, offset, bytes.length — offset); if (result == —1) { break; } offset += result; } return new String(bytes, encoding); } public static void main(String[] args) { String filePath = «doc.txt»; String content = null; try { content = readFile(filePath, StandardCharsets.UTF_8); } catch (IOException e) { e.printStackTrace(); } System.out.println(content); } } |
Download Code
Another solution in plain Java is to use the BufferedReader
with InputStreamReader
. Each invocation of the readLine()
method would read bytes from the file, convert them into characters, and then return. The following solution uses a StringBuilder
to form a string from file contents using a platform-dependent line separator.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
import java.io.*; class Main { public static String readFile(String path) throws IOException { StringBuilder sb = new StringBuilder(); FileInputStream fileStream = new FileInputStream(new File(path)); BufferedReader br = new BufferedReader(new InputStreamReader(fileStream)); String line; while ((line = br.readLine()) != null) { sb.append(line + System.lineSeparator()); } return sb.toString(); } public static void main(String[] args) { String filePath = «doc.txt»; String content = null; try { content = readFile(filePath); } catch (IOException e) { e.printStackTrace(); } System.out.println(content); } } |
Download Code
Another solution in plain Java is to use a FileReader to read the whole file into a character array, as shown below:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
import java.io.File; import java.io.FileReader; import java.io.IOException; class Main { public static void main(String[] args) { File file = new File(«demo.txt»); try(FileReader fr = new FileReader(file)) { char[] chars = new char[(int) file.length()]; fr.read(chars); String fileContent = new String(chars); System.out.println(fileContent); } catch (IOException e) { e.printStackTrace(); } } } |
Download Code
That’s all about copying text from a file into a Java String.
Summary: in this tutorial, you will learn how to read from a text file using standard library functions such as fgetc()
and fgets()
.
Steps for reading from a text file
To read from a text file, you follow these steps:
- First, open the text file using the
fopen()
function. - Second, use the
fgets()
orfgetc()
function to read text from the file. - Third, close the file using the
fclose()
function.
Reading from a text file one character at a time
To read from a text file one character at a time, you use the fgetc() function.
The following program reads from the readme.txt file one character at a time and display the file contents to the output:
Code language: C++ (cpp)
#include <stdio.h> int main() { char *filename = "readme.txt"; FILE *fp = fopen(filename, "r"); if (fp == NULL) { printf("Error: could not open file %s", filename); return 1; } // read one character at a time and // display it to the output char ch; while ((ch = fgetc(fp)) != EOF) putchar(ch); // close the file fclose(fp); return 0; }
Reading from a text file line by line
To read a line from a text file, you use the fgets() function:
Code language: C++ (cpp)
char * fgets ( char *str, int num, FILE *stream );
The fgets()
function reads characters from the stream
and store them into the str
.
The fgets()
function stops reading if:
- num-1 characters have been read
- the newline character or end-of-file character reached.
Note that the fgets()
function also includes the newline character in the str
.
The following example shows how to use the fgets() function to read a text file line by line and display the text to the output:
Code language: C++ (cpp)
#include <stdio.h> int main() { char *filename = "readme.txt"; FILE *fp = fopen(filename, "r"); if (fp == NULL) { printf("Error: could not open file %s", filename); return 1; } // reading line by line, max 256 bytes const unsigned MAX_LENGTH = 256; char buffer[MAX_LENGTH]; while (fgets(buffer, MAX_LENGTH, fp)) printf("%s", buffer); // close the file fclose(fp); return 0; }
Summary
- Use the
fgetc()
function to read from a text file, a character at a time. - Use the
fgets()
function to read from a text file, line by line.
Was this tutorial helpful ?
Summary: in this tutorial, you learn various ways to read text files in Python.
TL;DR
The following shows how to read all texts from the readme.txt
file into a string:
with open('readme.txt') as f:
lines = f.readlines()
Code language: Python (python)
Steps for reading a text file in Python
To read a text file in Python, you follow these steps:
- First, open a text file for reading by using the
open()
function. - Second, read text from the text file using the file
read()
,readline()
, orreadlines()
method of the file object. - Third, close the file using the file
close()
method.
1) open() function
The open()
function has many parameters but you’ll be focusing on the first two:
open(path_to_file, mode)
Code language: Python (python)
The path_to_file
parameter specifies the path to the text file.
If the program and file are in the same folder, you need to specify only the filename of the file. Otherwise, you need to include the path to the file as well as the filename.
To specify the path to the file, you use the forward-slash ('/'
) even if you’re working on Windows.
For example, if the file readme.txt
is stored in the sample
folder as the program, you need to specify the path to the file as c:/sample/readme.txt
The mode
is an optional parameter. It’s a string that specifies the mode in which you want to open the file. The following table shows available modes for opening a text file:
Mode | Description |
---|---|
'r' |
Open for text file for reading text |
'w' |
Open a text file for writing text |
'a' |
Open a text file for appending text |
For example, to open a file whose name is the-zen-of-python.txt
stored in the same folder as the program, you use the following code:
f = open('the-zen-of-python.txt','r')
Code language: Python (python)
The open()
function returns a file object which you will use to read text from a text file.
2) Reading text methods
The file object provides you with three methods for reading text from a text file:
read(size)
– read some contents of a file based on the optional size and return the contents as a string. If you omit the size, theread()
method reads from where it left off till the end of the file. If the end of a file has been reached, theread()
method returns an empty string.readline()
– read a single line from a text file and return the line as a string. If the end of a file has been reached, thereadline()
returns an empty string.readlines()
– read all the lines of the text file into a list of strings. This method is useful if you have a small file and you want to manipulate the whole text of that file.
3) close() method
The file that you open will remain open until you close it using the close()
method.
It’s important to close the file that is no longer in use for the following reasons:
- First, when you open a file in your script, the file system usually locks it down so no other programs or scripts can use it until you close it.
- Second, your file system has a limited number of file descriptors that you can create before it runs out of them. Although this number might be high, it’s possible to open a lot of files and deplete your file system resources.
- Third, leaving many files open may lead to race conditions which occur when multiple processes attempt to modify one file at the same time and can cause all kinds of unexpected behaviors.
The following shows how to call the close()
method to close the file:
f.close()
Code language: Python (python)
To close the file automatically without calling the close()
method, you use the with
statement like this:
with open(path_to_file) as f:
contents = f.readlines()
Code language: Python (python)
In practice, you’ll use the with
statement to close the file automatically.
Reading a text file examples
We’ll use the-zen-of-python.txt file for the demonstration.
The following example illustrates how to use the read()
method to read all the contents of the the-zen-of-python.txt
file into a string:
with open('the-zen-of-python.txt') as f:
contents = f.read()
print(contents)
Code language: Python (python)
Output:
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
...
Code language: Python (python)
The following example uses the readlines()
method to read the text file and returns the file contents as a list of strings:
with open('the-zen-of-python.txt') as f:
[print(line) for line in f.readlines()]
Code language: Python (python)
Output:
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
...
Code language: Python (python)
The reason you see a blank line after each line from a file is that each line in the text file has a newline character (n). To remove the blank line, you can use the strip()
method. For example:
with open('the-zen-of-python.txt') as f:
[print(line.strip()) for line in f.readlines()]
Code language: Python (python)
The following example shows how to use the readline()
to read the text file line by line:
with open('the-zen-of-python.txt') as f:
while True:
line = f.readline()
if not line:
break
print(line.strip())
Code language: Python (python)
Output:
Explicit is better than implicit.
Complex is better than complicated.
Flat is better than nested.
...
Code language: Python (python)
A more concise way to read a text file line by line
The open()
function returns a file object which is an iterable object. Therefore, you can use a for
loop to iterate over the lines of a text file as follows:
with open('the-zen-of-python.txt') as f:
for line in f:
print(line.strip())
Code language: Python (python)
This is a more concise way to read a text file line by line.
Read UTF-8 text files
The code in the previous examples works fine with ASCII text files. However, if you’re dealing with other languages such as Japanese, Chinese, and Korean, the text file is not a simple ASCII text file. And it’s likely a UTF-8 file that uses more than just the standard ASCII text characters.
To open a UTF-8 text file, you need to pass the encoding='utf-8'
to the open()
function to instruct it to expect UTF-8 characters from the file.
For the demonstration, you’ll use the following quotes.txt
file that contains some quotes in Japanese.
The following shows how to loop through the quotes.txt
file:
with open('quotes.txt', encoding='utf8') as f:
for line in f:
print(line.strip())
Code language: Python (python)
Output:
Summary
- Use the
open()
function with the'r'
mode to open a text file for reading. - Use the
read()
,readline()
, orreadlines()
method to read a text file. - Always close a file after completing reading it using the
close()
method or thewith
statement. - Use the
encoding='utf-8'
to read the UTF-8 text file.
Did you find this tutorial helpful ?
Disclosure: This article may contain affiliate links. When you purchase, we may earn a commission.
There was no easy way to read a text file as String in Java until JDK 7, which released NIO 2. This API now provides a couple of utility methods that you can use to read the entire file as String e.g. Files.readAllBytes() returns a byte array of the entire text file. You can convert that byte array to String to have a whole text file as String inside your Java program. If you need all lines of files as a List of String e.g. into an ArrayList, you can use Files.readAllLines() method. This returns a List of String, where each String represents a single line of the file.
Prior to these API changes, I used to use the BufferedReader and StringBuilder to read the entire text file as String. You iterate through the file, reading one line at a time using readLine() method and appending them into a StringBuilder until you reach the end of the file. You can still use this method if you are running on Java SE 6 or the lower version.
In this article, we’ll look at a couple of examples to demonstrate how to read a text file as a String or get a List of lines as String from a text file. I’ll also show the BufferedReader way, which you can use in Java SE 6 and earlier versions.
Reading a Text File as String in Java — Files.readAllBytes() Example
This is the standard way to read the whole file as String in Java. Just make sure the file is small or medium-size and you have enough heap space to hold the text from a file into memory. If you don’t have enough memory, the below code can throw java.lang.OutOfMemoryError: Java heap space, so beware of that.
Here is the method to read a file as String in Java 7:
public static String readFileAsString(String fileName) { String text = ""; try { text = new String(Files.readAllBytes(Paths.get("file.txt"))); } catch (IOException e) { e.printStackTrace(); } return text; }
You should also be careful with character encoding. The above code assumes that the file and platform’s default character encoding are the same. If that’s not the case then use the correct character encoding while converting byte array to String in Java. See these free Java Programming online courses to learn more about character encoding and converting bytes to text in Java.
Reading Text File as String in Java — BufferedReader Example
This was the old way of reading a file as String in Java. You can see that it requires almost 8 to 10 lines of code, which can now effectively be done in just one line in Java 7. It uses the readLine() method to read the file line by line and then joined them together using StringBuilder’s append() method.
BufferedReader br = new BufferedReader(new FileReader("file.txt")); StringBuilder sb = new StringBuilder(); String line = br.readLine(); while (line != null) { sb.append(line).append("n"); line = br.readLine(); } String fileAsString = sb.toString();
Don’t forget to append the n character to insert the line break, otherwise, all lines will be joined together and all text from the file will come as just one big line. If you are not familiar with n or rn, I suggest you join a comprehensive Java course The Complete Java Masterclass to learn more about special characters in Java.
Java Program to read a text file as String
Here is the complete Java program to read a text file as String, it includes both JDK 6 and JDK 7 approaches to reading the content of the file in a string variable.
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; /* * Java Program read a text file as String * first by using the JDK 7 utility method Files.readAllBytes() * and second by using BufferedReader and StringBuilder. */ public class ReadFileAsString { public static void main(String[] args) throws Exception { // read whole file as String in JDK 7 String data = ""; try { data = new String(Files.readAllBytes(Paths.get("file.txt"))); } catch (IOException e) { e.printStackTrace(); } System.out.println("Text file as String in Java"); System.out.println(data); // read file as String in Java SE 6 and lower version BufferedReader br = new BufferedReader(new FileReader("file.txt")); StringBuilder sb = new StringBuilder(); String line = br.readLine(); while (line != null) { sb.append(line).append("n"); line = br.readLine(); } String fileAsString = sb.toString(); System.out .println("whole file as String using BufferedReader and StringBuilder"); System.out.println(fileAsString); br.close(); } } Output Text file as String in Java Effective Java is the best book for senior Developers. Clean code is the best book for Junior Developers. whole file as String using BufferedReader and StringBuilder Effective Java is the best book for senior Developers. Clean code is the best book for Junior Developers.
In the second example, don’t forget to append the «n» or «rn» depending upon whether you are running on Windows or UNIX, otherwise, all lines of files are concatenated into just one line. Also, don’t forget to close the BufferedReader to prevent resource leaks, especially when you are not using the automatic resource management feature of Java 7.
That’s all about how to read a text file as String in Java. You can use the new way if your program is running on JRE 7 and the old way if you are using Java 6 or lower versions. Pay attention to the character encoding of the file if you are not sure whether both file and platform’s default character encoding (the machine where your Java program is running) is not the same.
Related Java File tutorials you may like
- How to write to a file using BufferedWriter in Java? (solution)
- How to read/write an XLSX file in Java? (solution)
- How to read a text file using BufferedReader in Java? (example)
- How to load data from a CSV file in Java? (example)
- How to append text to a file in Java? (solution)
- How to read InputStream as Stream in Java? (example)
- How to find the highest occurring word from a file in Java? (solution)
- 2 ways to read a text file in Java? (solution)
That’s all about how to read data from a file as a String in Java. This is a useful technique Java developers should know, it can be helpful in many cases like loading log files or content files.