የጃቫ ገቢና ወጪ ምንጮች (Java IO Streams)10.1 ምዕላደ-ቃላት
10.2 ምንጮችበጃቫ እንዴት አድርገን ነው ዴታ ከኪቦርድ፥ ከፋይሎች፥ ወይም ከሌሎች ምንጮች የምናነበው? በተጨማሪ ወደ ፋይሎች፥ ወደ ገጾች፥ ወይም ወደ ሌሎች ምንጮች ዴታ እንዴት እንጽፋለን? ባለፉት ምዕራፎች የቀረቡት አንዳንድ ምሳሌዎች እነዚህን ጥያቄዎች በጨረፍታ ይነካሉ፤ ነገር ግን በቂ መልስ አይሰጡም። በዚህ ክፍል መልሶቹን ለመልከት እንሞክራለን። ምንጭ (stream) ዴታዎች ወይም ነገሮች የሚመጡበት ወይም የሚወጡበት አድረገን መገንዘብ እንችላለን። ተጠቃሚዎች ኪቦርድ ተጠቅመው ዴታዎችን ወይም ነገሮችን ካስገቡ፥ ኪቦርዱን የገቢ ምንጭ (input stream) ብለን እንጠራዋለን። እንደ ኪቦርድ ተመሳሳይ ተግባር ያላቸው የኮምፕዩተር መሣሪያዎችን በሙሉ በዚሁ ዘይቤ እንጠቅሳቸዋለን። ባንጻሩ የወጪ ምንጭ (output stream) ብለን የምንጠራቸው የኮምፕዩተር አካሎችና መሣሪያዎች አሉ። ፋይሎች፥ የሞኒተር ገጾች አብዮቹ ናቸው። የምንጭ ቃል አጠቃቀማችን ከተለመደው ትርጕሙ ላይ አዲስ ቃና ይጨምራል። ለፕሮግራሞች እነኮቦርድና የመሳሰሉት የገቢ ምንጭ፤ እነገጽና የመሳሰሉት ደግሞ የወጪ ምንጭ ከተባሉ፥ «ምንጭ» ሁለት አቅጣጫ ይኖረዋል። ለመጪ ዴታዎችና ነገሮች መነሻ፤ ለውጪዎቹ ደግሞ መድረሻ ለማለት ነው። በጃቫ አሠራር ማንኛውም የገቢ ሆነ የወጪ ምንጭ በመደብ ርቢ መወከል አለበት። ከዛ በኃላ ነው ለሥራ ዝግጁ የሚሆነው። በተከታዩ ክፍል ዝርዝሩን እናያለን። በተጨማሪ የጠኑ ችግሮችን ይቀንስ ይረዳ ዘንድ የጃቫ የገቢም ሆነ የወጪ ምንጭ መደቦች ግዴታዊ ኧክሴፕሽኖች ይጠቀማሉ። በትክክል ተቀብሎ፥ የተፈለገውን እርምጃ መውሰድ የውዴታ ግዴታ ነው። 10.3 የሆሄያት የገቢ ምንጮችበምዕራፍ ፫ እንደተጠቀሰው፥ የጃቫ ሆሄ የዩንኮድን ደንብ ይከተላል። በመሆኑም እያንዳንዱ ሆሄ የሁለት ባይት ቦታ ይወስዳል። በሌላ በኩል የዩንኮድ ሆሄ የማይጠቀም ማንኛውም ኦ/ሲ (Operating System) እንዲሁም ሶፍትዌር ከዚህ ጋር ስለማይጣጣም ከአንድ ስልት ወደሌላኛው በሁለቱም አቅጠጫ ቅየራ መካሄድ አለበት። በዚህ ክፍል ይኸን ሁኔታ ተረድተው፥ ተገቢውን ቅየራ እየደረጉ የማንበብ ሥራችንን የሚረዱ መደቦች እንጠቀማለን። ወደ ሌሎቹ የጃቫ የዴታ ዓይነቶች ወደ ፊት እንደርስበታለን። በመጀመሪያ ከኪቦርድ ሆሄያትን እንዴት እናነባለን? ከእንደዚህ ዓይነት የገቢ የኮምፕዩተር ክፍሎች ዴታ የምናነብበት ጥቂት ዘዴዎች አሉ። አንዱ ይኸን ይመስላል። በቅድሚያ ድርጊቶቹ በተርታ።
እነዚህ ድርጊቶች በተግባር ያካተተው ከዚህ በታች ይታያል። አንባቢው የደመቁትን ሐረጎች ከተመለከተ፥ ሦስት ነገሮችን ይታዘባል። የመጀመሪያው፥ ስህተት ተፈጥሮ ኧክሴፕሽን ከተወረወረ፥ የሜይን መላ እሱን ለጠራው ወገን ያንን ኧክሴፕሽን ያስተላልፋል። ይህ አንድ ዓይነት እርምጃ መሆኑን ለማሳየት እንጂ ተግባሩ የግዴለሽነት ነው። ምንም ችግር ይምጣ፥ የራሴን ጣጣ ሌላው ወገን አስታቅፋለሁ እንደማለት ነው። አንዳንድ ሁኔታዎች ውስጥ ግን መልካም እርምጃ ሊሆን ይችላል። ቀጥሎ፥ በSystem.in የተመሠረተ ከኪቦርድ አንባቢ ርቢ ይፈጥራል። በመጨረሻ ከኪቦርድ መጪዎቹ ሆሄያትን አንድ በአንድ ያነባል።
ይህ ፕሮግራም ከኪቦርድ ሆሄያትን ማንበብ መቻሉ ባያጠራጥርም፥ ፍጥነቱን ማሻሻል እንዲሁም ኧስትሪንግ ደጋግሞ ከመፍጠር መቆጠቡ ጥሩ ሥራ ነው። ሆሄያቱን አንዳንድ በተርታ ከማንበብ ይልቅ በኧስትሪንግ መልክ አንድ ጊዜ ማንበቡ ይመረጣል። ይኸንን የምናደርገው የBufferedReader መደብ በመደረብ ነው። ቃል አጻጻፉ እነሆ። አደራረቡን በጥሞና እንመልከት።
InputStreamReader ir = አሁን የreadLine() መላ ከbr ርቢ፥ በአንድ ተናጠል እርምጃ ከኪቦርዱ የሚመጡትን ሆሄያት በሙሉ ያነባል። String line = br.readLine() ; ቀጥለን እነዚህን ለውጦችና የተሻሻለ የኧክሴፕሽን አያያዝን ያከተተውን ፕሮግራም እንይ።
አሁን ወደ ፋይል የገቢ ምንጮች እናመራለን። የማንበብ ሂደቱ ቅደም-ተከተል ይኸን ይመስላል።
እንደተለመደው ደምቀው በሚታዩት መስመሮች ላይ እናተኩር። የመጀመሪያዎቹ ቃሎች ሦስት ልዩ ልዩ ርቢዎች ከሚከተሉት መደቦች ይፈጥራሉ፦ የFile መደብ ከፋይሎች ጋር አብሮ ለመሥራት 2ኛ) የFileReader መደብ መሠረታዊውን ንባብ ለማካሄድ 3ኛ) የBufferedReader መደብ ንባቡን ለማቀላጠፍ። ሦስቱን ቃሎች አሳጥሮ እንደዚህ መጻፍ ይቻል ነበር፤ ግን የአንባቢውን ምቾት ይቀንሳል።
10.4 የሆሄያት የወጪ ምንጮችአሁን ትኩረታችንን ወደ የሆሄያት ወጪ ምንጮች እናዞራለን። ነገሮችን ወደ ገጽ መጻፍ ቀላልና ጥናቱ ከተጀመረበት ጊዜ እስካሁን ድረስ ስናካሂደው ቆይተናል። ስለዚህ ወደ ፋይሎች ሆሄያትን እንዴት እንጽፋለን የሚለውን ጥያቄ ለማየት እንሞክራለን። ወደ እሱ ከመግባታችን በፊት ግን የሚከተለውን ቃል ምን እንደነበረ በዝርዝር እንመርምር። በተሰጡት ምሳሌዎች በሙሉ ይህ ሳይጠቀስ አላለፈም። የSystem መሠረታዊ ከሚባሉት የጃቫ መደቦች አንዱ ነው። ከኪቦርድ ሆሄያትን ለማንበብ፥ ወደ ገጽ ነገሮችን ለመጻፍ፥ ስዓት ለማወቅ፥ እንዲሁም ለሌሎች ተግባሮች እንጠቀመዋለን። ይህ መደብ በይፋ ያወጣቸው የኧስታቲክ ተውላጠ-ቃላት አሉት፦ err፥ in እና out ናቸው። የout ርቢ የPrintStream መደብ ዘርና የተለያዩ የዴታ ዓይነቶችን ወደ ገጽ ለመጻፍ የሚያስችሉ መላዎች ያሉት ነው። አሁን ወደ ፋይሎች ጉዳይ እንሂድ። ከፋይሎች ማንበብ ወይም ወደ እነሱ መጻፍ፥ የFile ርቢ ውክልና ማስፈለጉን አስቀድመን አውስተናል። ስለዚህ የመጀመሪያው ተግባራችን ይኸው ይሆናል። File outFile = new File("planets.txt") ; ይህ ፋይል ከሌለ አዲስ ይፈጠራል፤ ካለ ግን ይዘቱ ይሰረዝና በአዲሱ ይተካል። በነገራችን ላይ፥ የFile መደብ በራሱ የማንበብ ሆነ የመጻፍ ችሎታ ስለሌለው ጸሐፊ መደብ መደረብ ይኖርብናል፤ እናም እነሆ። FileWriter fr = new FileWriter(outFile) ; የFileWriter መደብ ሆሄያትን የመጻፍ ችሎታ አለው፤ ግን ሥራው ይጣደፍ ዘንድ የBufferedWriter መደብ መደረቡ ይረዳል። BufferedWriter bw = new BufferedWriter(fr) ; እነዚህን ሁሉ አካቶ ወደ ፋይል የመጻፉን ሥራ የሚያካሂደው መደብ ይህ ነው።
10.5 የጃቫ ዴታ ዓይነታትና ምንጮችበሌሎች የኮምፕዩተር ቋንቋዎች ልዩ ልዩ የዴታ ዓይነታትን፥ ማለት char፥ int፥ float፥ double እና የመሳሰሉትን በቀላሉ መጻፍ ወይም ማንበብ ይቻላል። ነገር ግን ወደ ጃቫ ስንመጣ ሁኔታው ለየት ይላል። አንዳንድ የጃቫ ዴታ ዓይነታት ከሌሎች ቋንቋዎች ጋር ሲነጻጸሩ ልዩነት እናገኛለን። ለምሳሌ ያህል፥ የድሮ ቋንቋዎችና ኦ/ሲች የዩንኮድን ሆሄያት አይደግፉም፤ ማለትም አሁንም ለአንድ ሆሄ የሚሰይሙት ቦታ አንድ ባይት (Byte) ነው። ለምሳሌ ዊንዶስ 98 ብንወስድ ይህ ገሀድ ይሆናል። C++ መሠረታዊ የዴታ ዓይነታት አውንታዊ ዕሴት ብቻ ወይም አውንታዊና አሉታዊ ዕሴቶችን እንዲይዙ ይፈቅዳል። በጃቫ አውንታዊ ብቻ የሚለው አማራጭ የለም። ከchar በስተቀር ሁሉም አውንታዊና አሉታዊ ዕሴቶችን የመጠበቅ ኃላፊነት አለባቸው። ይኸን ችግር እዚህ ማንሳቱ ዋጋው ምንድን ነው? በC++ የተጻፈ ፕሮግራም ያወጣውን ፋይል የተለያዩ የጃቫ ዴታ ዓይነታትን ተጠቅመን እናንብብ ብንል አዘቅት ውስጥ እንገባለን። ዴታዎች ይዘበራረቃሉ። ማንነታቸው ጠፍቶ ትርጉም ያጣሉ። በእነዚህና በመሳሰሉት ምክንያት ልዩ ልዩ የጃቫ ዴታ ዓይነታትን ማንበብ ወይም መጻፍ ከፍተኛ ጥንቃቄ ይጠይቃል። ሊነሱ የሚችሉ ችግሮችን ሙሉ በሙሉ ለመቀነስ፥ መፍትሔው ከሆሄያት ውጭ ንባብ ጠያቂ ፋይሎችን በጃቫ ካልተጻፉ በስተቀር አለመሞከር። ይኸንኑን ምክር በመከተል፥ መጀመሪያ በምዕራፍ ፫ የተሰጠውን የጨረቃ ዴታ ወደ ፋይል የሚጽፍ መደብ እናቀርብና አስከትሎ ያንን ፋይል መልሶ አንባቢ መደብ እናያለን። እንደ ተለመደው ወደ ፋይል ለመጻፍ የFile ርቢ እንፈጥራለን። ቀጥሎ ከፋይል ጋር መሥራት ያለበትን መደብ ርቢ እናበጃለን። በመጨረሻ፥ የጃቫ ዴታ ዓይነታት መጻፍ የሚችለውን መደብ በመደረብ ዝግጅቱን እናጠናቅቃለን።
File in = new File("moon.txt") ; የDataOutputStream መደብ ማንኛውንም መሠረታዊ የጃቫ የዴታ ዓይነት መጻፍ ይችላል። ለእያንዳንዳቸው የራሱን ጸሐፊ መላ ይለግሳል። ለምሳሌ የdouble ዴታ መጻፍ ብንሻ ውጤቱ ይኸን ይመስላል።
final double pi = 3.14159 ; ተግባራዊ ምሳሌ፦
መደቡ በኧሬይ ውስጥ የተጠበቁትን የጨረቃ ዴታዎች ወደ «moon.txt» ይጽፋል። የተጠቀምናቸውን መደቦችና ስማቸውን አንባቢው በጥንቃቄ ሊመረምራቸው ይገባል። የተጻፈውን ፋይል ቀጥሎ የቀረበው መደብ አንብሎ ውጤቱን ገጽ ላይ ያሳያል።
|
||||||||||||||||||||||||||||||||||||||||||||
Copyright © 2002-2005 Senamirmir Project