"మేము ఫైల్ ఇన్‌పుట్/అవుట్‌పుట్ కోసం స్ట్రీమ్‌లతో ప్రారంభిస్తాము. అయితే ముందుగా మొదటి విషయాలు."

ఫైల్‌లను చదవడానికి మరియు వ్రాయడానికి రెండు తరగతులు ఉన్నాయి: FileInputStream మరియు FileOutputStream . మీరు బహుశా ఇప్పటికే ఊహించినట్లుగా, ఫైల్‌ఇన్‌పుట్‌స్ట్రీమ్ ఫైల్ నుండి బైట్‌లను సీక్వెన్షియల్‌గా చదవగలదు మరియు ఫైల్‌అవుట్‌పుట్‌స్ట్రీమ్ వరుసగా బైట్‌లను ఫైల్‌కి వ్రాయగలదు. ఈ తరగతులు కలిగి ఉన్న పద్ధతులు ఇక్కడ ఉన్నాయి:

పద్ధతి పద్ధతి ఏమి చేస్తుంది
FileInputStream(String fileName);
- ఇది కన్స్ట్రక్టర్. ఇది డిస్క్‌లోని ఫైల్ పేరును పేర్కొనడానికి మిమ్మల్ని అనుమతిస్తుంది, దాని నుండి సృష్టించబడిన ఆబ్జెక్ట్ డేటాను చదువుతుంది.
int read();
— ఈ పద్ధతి ఫైల్ నుండి ఒక బైట్‌ని చదివి దాన్ని తిరిగి అందిస్తుంది. రిటర్న్ విలువ పూర్ణాంకానికి విస్తరించబడింది.
int available();
— ఈ పద్ధతి చదవని (అందుబాటులో ఉన్న) బైట్‌ల సంఖ్యను అందిస్తుంది.
void close();
- ఈ పద్ధతి స్ట్రీమ్‌ను "మూసివేస్తుంది". మీరు స్ట్రీమ్‌తో పని చేయడం పూర్తి చేసినప్పుడు మీరు దీనికి కాల్ చేస్తారు.
ఆబ్జెక్ట్ అప్పుడు ఫైల్‌ను మూసివేయడానికి అవసరమైన హౌస్‌కీపింగ్ కార్యకలాపాలను నిర్వహిస్తుంది, మొదలైనవి
. ఈ సమయంలో, మీరు స్ట్రీమ్ నుండి ఇకపై డేటాను చదవలేరు.

కేవలం వినోదం కోసం, ఫైల్‌లోని అన్ని బైట్‌ల మొత్తాన్ని గణిద్దాం. కోడ్ ఎలా ఉంటుందో ఇక్కడ ఉంది:

ఫైల్‌లోని అన్ని బైట్‌లను సంక్షిప్తం చేయండి
public static void main(String[] args) throws Exception
{
 //Create a FileInputStream object bound to «c:/data.txt».
 FileInputStream inputStream = new FileInputStream("c:/data.txt");
 long sum = 0;

 while (inputStream.available() > 0) //as long as there are unread bytes
 {
  int data = inputStream.read(); //Read the next byte
  sum +=  data; //Add it to the running total
 }
 inputStream.close(); // Close the stream

 System.out.println(sum); // Display the sum on the screen.
}

"మేము ఇప్పటికే ఇలాంటి వాటిని పరిశీలించాము. FileOutputStream ఎలా నిర్వహించబడింది?"

"సరే. ఇది చూడు:"

పద్ధతి పద్ధతి ఏమి చేస్తుంది
FileOutputStream (String fileName);
"ఇది కన్స్ట్రక్టర్. ఇది డిస్క్‌లోని ఫైల్ పేరును పేర్కొనడానికి మిమ్మల్ని అనుమతిస్తుంది, సృష్టించబడిన ఆబ్జెక్ట్ డేటాను వ్రాస్తుంది."
void write(int data);
"ఈ పద్ధతి తదుపరి బైట్‌ను వ్రాస్తుంది, డేటాను ఒక బైట్‌కి కుదిస్తుంది."
void flush();
"వ్రాయవలసిన డేటా తరచుగా మెమరీలో పెద్ద బ్లాక్‌లలో సేకరించబడుతుంది, ఆపై డిస్క్‌కు మాత్రమే వ్రాయబడుతుంది."

ఫ్లష్ కమాండ్ సేవ్ చేయని మొత్తం సమాచారాన్ని డిస్క్‌కి వ్రాయమని బలవంతం చేస్తుంది.

void close();
"ఈ పద్ధతి స్ట్రీమ్‌ను «మూసివేస్తుంది». మీరు స్ట్రీమ్‌తో పని పూర్తి చేసినప్పుడు మీరు దీన్ని కాల్ చేస్తారు."
ఆబ్జెక్ట్ అప్పుడు ఫైల్‌ను మూసివేయడానికి అవసరమైన హౌస్‌కీపింగ్ కార్యకలాపాలను నిర్వహిస్తుంది.

మీరు ఇకపై స్ట్రీమ్‌కు డేటాను వ్రాయలేరు మరియు ఫ్లష్ స్వయంచాలకంగా పిలువబడుతుంది.

"అంతే?"

"అవును, వ్రాయడానికి నిజానికి ఒకే ఒక పద్ధతి ఉంది: వ్రాయడం(). ఇది ఒక సమయంలో ఒక బైట్ మాత్రమే వ్రాస్తుంది. కానీ మీరు ఫైల్‌కి కావలసినంత సమాచారాన్ని వ్రాయడానికి ఇది మిమ్మల్ని అనుమతిస్తుంది."

ప్రోగ్రామింగ్ అనేది ఒక పెద్ద మరియు సంక్లిష్టమైన పనిని అనేక చిన్నవిగా విభజించే ప్రక్రియ. ముఖ్యంగా ఇక్కడ అదే ప్రక్రియ జరుగుతోంది: పెద్ద మొత్తంలో డేటాను చదవడం మరియు వ్రాయడం అనేది ఒక సమయంలో ఒక బైట్-పరిమాణ ముక్కలుగా చదవడం మరియు వ్రాయడంగా విభజించబడింది.

డిస్క్‌లో ఫైల్‌ను కాపీ చేయడానికి మీరు ఈ తరగతులను ఎలా ఉపయోగించవచ్చో ఇక్కడ ఉంది:

డిస్క్‌లో ఫైల్‌ను కాపీ చేయండి
public static void main(String[] args) throws Exception
{
 //Create a stream to read bytes from a file
 FileInputStream inputStream = new FileInputStream("c:/data.txt");
 //Create a stream to write bytes to a file
 FileOutputStream outputStream = new FileOutputStream("c:/result.txt");

 while (inputStream.available() > 0) //as long as there are unread bytes
 {
  int data = inputStream.read(); // Read the next byte into the data variable
  outputStream.write(data); // and write it to the second stream
 }

 inputStream.close(); //Close both streams. We don't need them any more.
 outputStream.close();
}

"ధన్యవాదాలు, రిషీ. ఈ కోడ్ అసలు ఎలా పనిచేస్తుందో నాకు ఎట్టకేలకు అర్థమైంది."