জাভাতে, আমার কাছে স্ট্রিং ভেরিয়েবলের একটি পাঠ্য ক্ষেত্র থেকে "পাঠ্য" নামক পাঠ্য রয়েছে।
আমি কীভাবে কোনও ফাইলের "পাঠ্য" ভেরিয়েবলের বিষয়বস্তু সংরক্ষণ করতে পারি?
জাভাতে, আমার কাছে স্ট্রিং ভেরিয়েবলের একটি পাঠ্য ক্ষেত্র থেকে "পাঠ্য" নামক পাঠ্য রয়েছে।
আমি কীভাবে কোনও ফাইলের "পাঠ্য" ভেরিয়েবলের বিষয়বস্তু সংরক্ষণ করতে পারি?
উত্তর:
আপনি যদি কোনও বাইনারি ডেটার পরিবর্তে কেবল পাঠ্য আউটপুট করে থাকেন তবে নিম্নলিখিতগুলি কাজ করবে:
PrintWriter out = new PrintWriter("filename.txt");
তারপরে, আপনার স্ট্রিংটি এতে লিখুন, ঠিক যেমন আপনি কোনও আউটপুট স্ট্রিমের মতো করে:
out.println(text);
আপনার আগের মতোই ব্যতিক্রম হ্যান্ডলিংয়ের প্রয়োজন হবে। আপনার out.close()
লেখা শেষ হয়ে গেলে অবশ্যই কল করবেন call
আপনি যদি জাভা 7 বা তার পরে ব্যবহার করছেন, আপনি " রিসোর্স-এর সাথে চেষ্টা করুন" ব্যবহার করতে পারেন যা আপনার PrintStream
সাথে কাজ শেষ হলে এটি স্বয়ংক্রিয়ভাবে বন্ধ হয়ে যাবে (যেমন ব্লকটি প্রস্থান করুন):
try (PrintWriter out = new PrintWriter("filename.txt")) {
out.println(text);
}
আপনি এখনও স্পষ্টভাবে java.io.FileNotFoundException
আগের মত নিক্ষেপ করতে হবে ।
অ্যাপাচি কমন্স আইওতে এটি করার জন্য কয়েকটি দুর্দান্ত পদ্ধতি রয়েছে, বিশেষত ফাইল ইউটিলেলে নিম্নলিখিত পদ্ধতি রয়েছে:
static void writeStringToFile(File file, String data)
যা আপনাকে একটি পদ্ধতিতে কল করে কোনও ফাইলে লেখার অনুমতি দেয়:
FileUtils.writeStringToFile(new File("test.txt"), "Hello File");
আপনি ফাইলটির জন্য এনকোডিংও নির্দিষ্ট করে বিবেচনা করতে পারেন।
FileUtils.writeStringToFile(new File("test.txt"), "Hello File", forName("UTF-8"));
কটাক্ষপাত জাভা ফাইল এপিআই
একটি দ্রুত উদাহরণ:
try (PrintStream out = new PrintStream(new FileOutputStream("filename.txt"))) {
out.print(text);
}
@Cleanup new FileOutputStream(...)
এবং আপনি শেষ করেছেন।
জাভা 7 এ আপনি এটি করতে পারেন:
String content = "Hello File!";
String path = "C:/a.txt";
Files.write( Paths.get(path), content.getBytes());
এখানে আরও তথ্য রয়েছে: http://www.drdobbs.com/jvm/java-se-7-new-file-io/231600403
content.getBytes(StandardCharsets.UTF_8)
এনকোডিং স্পষ্টভাবে সংজ্ঞায়িত করতে ব্যবহার করা যেতে পারে।
আমার প্রকল্পে ঠিক সেরকমই কিছু করেছেন। ফাইল রাইটার ব্যবহার আপনার কাজের কিছু অংশ সহজতর করবে। এবং এখানে আপনি সুন্দর টিউটোরিয়াল খুঁজে পেতে পারেন ।
BufferedWriter writer = null;
try
{
writer = new BufferedWriter( new FileWriter( yourfilename));
writer.write( yourstring);
}
catch ( IOException e)
{
}
finally
{
try
{
if ( writer != null)
writer.close( );
}
catch ( IOException e)
{
}
}
.close()
নিক্ষেপ করে না (অন্তত জাভা 7 এ?), শেষ ট্রাইচ্যাচ সম্ভবত অনর্থক?
throw new RuntimeException(e);
অ্যাপাচি কমন্স আইওFileUtils.writeStringToFile()
থেকে ব্যবহার করুন । এই নির্দিষ্ট চাকা পুনরায় উদ্ভাবনের প্রয়োজন নেই।
ক্লাস বা ফাংশন যে কোনও পাঠ্য পরিচালনা করছে তা থেকে আপনার ফাইলটি লিখতে আপনি নীচের কোডটি সংশোধন করে ব্যবহার করতে পারেন। যদিও একটি নতুন পাঠ্য সম্পাদক প্রয়োজন বিশ্বের কেন ...
import java.io.*;
public class Main {
public static void main(String[] args) {
try {
String str = "SomeMoreTextIsHere";
File newTextFile = new File("C:/thetextfile.txt");
FileWriter fw = new FileWriter(newTextFile);
fw.write(str);
fw.close();
} catch (IOException iox) {
//do stuff with exception
iox.printStackTrace();
}
}
}
ইন জাভা 11java.nio.file.Files
বর্গ দুটি নতুন উপযোগ পদ্ধতি দ্বারা বাড়ানো হয়েছে একটি ফাইলে একটি স্ট্রিং লিখতে। প্রথম পদ্ধতিটি ( এখানে জাভাক ডক দেখুন ) চরসেট ইউটিএফ -8 ডিফল্ট হিসাবে ব্যবহার করে :
Files.writeString(Path.of("my", "path"), "My String");
এবং দ্বিতীয় পদ্ধতি ( এখানে জাভাক ডক দেখুন ) একটি পৃথক চরসেট নির্দিষ্ট করতে দেয়:
Files.writeString(Path.of("my", "path"), "My String", StandardCharset.ISO_8859_1);
উভয় পদ্ধতিতে ফাইল হ্যান্ডলিংয়ের বিকল্পগুলি সেট করার জন্য একটি alচ্ছিক ভারার্গস পরামিতি রয়েছে (জাভাডকটি এখানে দেখুন )। নিম্নলিখিত উদাহরণটি একটি অ-বিদ্যমান ফাইল তৈরি করবে বা একটি বিদ্যমান স্ট্রিং যুক্ত করবে:
Files.writeString(Path.of("my", "path"), "String to append", StandardOpenOption.CREATE, StandardOpenOption.APPEND);
এই ধরণের ক্রিয়াকলাপের জন্য আমি যখনই সম্ভব লাইব্রেরিতে নির্ভর করতে পছন্দ করি। এটি আমাকে দুর্ঘটনাক্রমে একটি গুরুত্বপূর্ণ পদক্ষেপ বাদ দেওয়ার সম্ভাবনা কম করে তোলে (যেমন ভুল উলফস্নাইপস উপরে তৈরি)। কিছু লাইব্রেরি উপরে প্রস্তাবিত, তবে এই ধরণের জিনিসের জন্য আমার প্রিয় গুগল পেয়ারা । পেয়ারাতে ফাইল নামে একটি শ্রেণি রয়েছে যা এই কাজের জন্য দুর্দান্তভাবে কাজ করে:
// This is where the file goes.
File destination = new File("file.txt");
// This line isn't needed, but is really useful
// if you're a beginner and don't know where your file is going to end up.
System.out.println(destination.getAbsolutePath());
try {
Files.write(text, destination, Charset.forName("UTF-8"));
} catch (IOException e) {
// Useful error handling here
}
Charsets.UTF-8
।
Charsets.UTF_8
আসলে
Files.asCharSink(file, charset).write(text)
অ্যাপাচি কমন্স আইও এপিআই ব্যবহার করুন। ইহা সাধারণ
হিসাবে API ব্যবহার করুন
FileUtils.writeStringToFile(new File("FileNameToWrite.txt"), "stringToWrite");
মাভেন নির্ভরতা
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
যদি আপনার একক স্ট্রিংয়ের উপর ভিত্তি করে পাঠ্য ফাইল তৈরি করতে হয়:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
public class StringWriteSample {
public static void main(String[] args) {
String text = "This is text to be saved in file";
try {
Files.write(Paths.get("my-file.txt"), text.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}
}
এটি ব্যবহার করুন, এটি খুব পঠনযোগ্য:
import java.nio.file.Files;
import java.nio.file.Paths;
Files.write(Paths.get(path), lines.getBytes(), StandardOpenOption.WRITE);
import java.io.*;
private void stringToFile( String text, String fileName )
{
try
{
File file = new File( fileName );
// if file doesnt exists, then create it
if ( ! file.exists( ) )
{
file.createNewFile( );
}
FileWriter fw = new FileWriter( file.getAbsoluteFile( ) );
BufferedWriter bw = new BufferedWriter( fw );
bw.write( text );
bw.close( );
//System.out.println("Done writing to " + fileName); //For testing
}
catch( IOException e )
{
System.out.println("Error: " + e);
e.printStackTrace( );
}
} //End method stringToFile
আপনি এই পদ্ধতিটি আপনার ক্লাসে প্রবেশ করতে পারেন। আপনি যদি কোনও ক্লাসে একটি মেথড মেথড সহ এই পদ্ধতিটি ব্যবহার করে থাকেন তবে স্ট্যাটিক কী শব্দটি যুক্ত করে এই শ্রেণিটিকে স্থিতিতে পরিবর্তন করুন। যে কোনও উপায়ে আপনার java.io আমদানি করতে হবে * এটি অন্যথায় কাজ করার জন্য ফাইল, ফাইল রাইটার এবং বাফারড্রাইটার স্বীকৃত হবে না।
আপনি এটি করতে পারেন:
import java.io.*;
import java.util.*;
class WriteText
{
public static void main(String[] args)
{
try {
String text = "Your sample content to save in a text file.";
BufferedWriter out = new BufferedWriter(new FileWriter("sample.txt"));
out.write(text);
out.close();
}
catch (IOException e)
{
System.out.println("Exception ");
}
return ;
}
};
ব্যবহার Java 7
:
public static void writeToFile(String text, String targetFilePath) throws IOException
{
Path targetPath = Paths.get(targetFilePath);
byte[] bytes = text.getBytes(StandardCharsets.UTF_8);
Files.write(targetPath, bytes, StandardOpenOption.CREATE);
}
Files.write(targetPath, bytes);
তখন ফাইলটি ওভাররাইট করতে ব্যবহার করুন। এটি আশানুরূপ কাজ করবে।
Org.apache.commons.io.FileUtils ব্যবহার করে:
FileUtils.writeStringToFile(new File("log.txt"), "my string", Charset.defaultCharset());
আপনি যদি কেবলমাত্র একটি ব্লকের পাঠ্যকে ফাইলের দিকে চাপ দেওয়ার বিষয়ে চিন্তা করেন তবে এটি প্রতিবার এটি ওভাররাইট হয়ে যাবে।
JFileChooser chooser = new JFileChooser();
int returnVal = chooser.showSaveDialog(this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
FileOutputStream stream = null;
PrintStream out = null;
try {
File file = chooser.getSelectedFile();
stream = new FileOutputStream(file);
String text = "Your String goes here";
out = new PrintStream(stream);
out.print(text); //This will overwrite existing contents
} catch (Exception ex) {
//do something
} finally {
try {
if(stream!=null) stream.close();
if(out!=null) out.close();
} catch (Exception ex) {
//do something
}
}
}
এই উদাহরণটি ব্যবহারকারীকে ফাইল চয়নকারী ব্যবহার করে একটি ফাইল নির্বাচন করতে দেয়।
লেখক / আউটপুটস্ট্রিমটি শেষ অবধি বন্ধ করা আরও ভাল, যদি কিছু ঘটে থাকে তবে
finally{
if(writer != null){
try{
writer.flush();
writer.close();
}
catch(IOException ioe){
ioe.printStackTrace();
}
}
}
private static void generateFile(String stringToWrite, String outputFile) {
try {
FileWriter writer = new FileWriter(outputFile);
writer.append(stringToWrite);
writer.flush();
writer.close();
log.debug("New File is generated ==>"+outputFile);
} catch (Exception exp) {
log.error("Exception in generateFile ", exp);
}
}
আমি মনে করি সবচেয়ে ভাল উপায়টি ব্যবহার করা হচ্ছে Files.write(Path path, Iterable<? extends CharSequence> lines, OpenOption... options)
:
String text = "content";
Path path = Paths.get("path", "to", "file");
Files.write(path, Arrays.asList(text));
জাভাডোক দেখুন :
একটি ফাইল পাঠ্য লাইন লিখুন। প্রতিটি লাইন একটি গৃহস্থালি ক্রম এবং সিস্টেম সম্পত্তি লাইন.সেস্পেটর দ্বারা নির্ধারিত হিসাবে প্ল্যাটফর্মের লাইন বিভাজক দ্বারা সমাপ্ত প্রতিটি লাইনের সাথে ক্রমে ফাইলটিতে লেখা হয়। অক্ষরগুলি নির্দিষ্ট অক্ষরেট ব্যবহার করে বাইটগুলিতে এনকোড করা হয়।
অপশন প্যারামিটার ফাইলটি কীভাবে তৈরি বা খোলার তা সুনির্দিষ্ট করে। যদি কোনও বিকল্প উপস্থিত না থাকে তবে এই পদ্ধতিটি এমনভাবে কাজ করে যা CREATE, TRUNCATE_EXISTING, এবং WRITE অপশন উপস্থিত রয়েছে। অন্য কথায়, এটি লেখার জন্য ফাইলটি খোলে, উপস্থিত না থাকলে ফাইল তৈরি করে, বা প্রাথমিকভাবে একটি নিয়মিত-ফাইলকে ০ আকারের আকারে ছাঁটাই করে দেয় পদ্ধতিটি নিশ্চিত করে যে সমস্ত লাইন লেখার সময় ফাইলটি বন্ধ হয়ে যায় ( অথবা আই / ও ত্রুটি বা অন্য রানটাইম ব্যতিক্রম নিক্ষেপ করা হয়)। যদি আই / ও ত্রুটি দেখা দেয় তবে ফাইলটি তৈরি বা কেটে যাওয়ার পরে, বা কিছু বাইট ফাইলে লেখার পরে এটি তা করতে পারে।
দয়া করে নোট করুন আমি দেখছি জাভা অন্তর্নির্মিত দিয়ে লোকেরা ইতিমধ্যে উত্তর দিয়েছে Files.write
, তবে আমার উত্তরে কী বিশেষ উল্লেখ করা উচিত বলে মনে হয় না যে পদ্ধতিটির ওভারলোডেড সংস্করণ যা byte[]
অ্যারের পরিবর্তে চারসেকেন্স (অর্থাত্ স্ট্রিং) এর একটি Iterable লাগে, সুতরাং এটির text.getBytes()
প্রয়োজন হয় না thus যা আমি কিছুটা ক্লিনার বলে মনে করি।
আপনি যদি স্ট্রিং থেকে ক্যারেজ রিটার্নের অক্ষরগুলিকে একটি ফাইলে রাখতে চান তবে একটি কোড উদাহরণ:
jLabel1 = new JLabel("Enter SQL Statements or SQL Commands:");
orderButton = new JButton("Execute");
textArea = new JTextArea();
...
// String captured from JTextArea()
orderButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
// When Execute button is pressed
String tempQuery = textArea.getText();
tempQuery = tempQuery.replaceAll("\n", "\r\n");
try (PrintStream out = new PrintStream(new FileOutputStream("C:/Temp/tempQuery.sql"))) {
out.print(tempQuery);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(tempQuery);
}
});
সমস্ত উপায় অ্যান্ড্রয়েড সংস্করণগুলিতে চলার কারণে এবং ইউআরএল / ইউআরআইয়ের মতো ফেচিং রিসোর্সের প্রয়োজনীয়তার কারণে আমার উপায় স্ট্রিমের উপর ভিত্তি করে রয়েছে, যে কোনও পরামর্শ স্বাগত।
যথাসম্ভব, স্ট্রিমগুলি (ইনপুটস্ট্রিম এবং আউটপুট স্ট্রিম) বাইনারি ডেটা স্থানান্তর করে, বিকাশকারী যখন কোনও স্ট্রিমে একটি স্ট্রিং লিখতে যায়, প্রথমে অবশ্যই এটি বাইটে রূপান্তর করতে হবে, বা অন্য কথায় এটি এনকোড করা উচিত।
public boolean writeStringToFile(File file, String string, Charset charset) {
if (file == null) return false;
if (string == null) return false;
return writeBytesToFile(file, string.getBytes((charset == null) ? DEFAULT_CHARSET:charset));
}
public boolean writeBytesToFile(File file, byte[] data) {
if (file == null) return false;
if (data == null) return false;
FileOutputStream fos;
BufferedOutputStream bos;
try {
fos = new FileOutputStream(file);
bos = new BufferedOutputStream(fos);
bos.write(data, 0, data.length);
bos.flush();
bos.close();
fos.close();
} catch (IOException e) {
e.printStackTrace();
Logger.e("!!! IOException");
return false;
}
return true;
}
আপনি উদাহরণস্বরূপ টেক্সটএরিয়ার সমস্ত বিষয়বস্তু রাখার জন্য অ্যারেলিস্ট ব্যবহার করতে পারেন, এবং সেভকে কল করে প্যারামিটার হিসাবে পাঠাতে পারেন, লেখক যেমন স্ট্রিং লাইন লিখেছিলেন, তারপরে আমরা শেষে আমাদের অ্যারেলিস্ট লিখতে "লাইন" লাইনটি ব্যবহার করি আমরা টেক্সট ফাইলটিতে টেক্সটআরিয়া থাকব। যদি কিছু বোঝা না যায় তবে আমি দুঃখিত গুগল অনুবাদক এবং আমি যারা ইংরেজী বলতে পারি না।
উইন্ডোজ নোটপ্যাড দেখুন, এটি সর্বদা লাইনগুলিতে লাফ দেয় না এবং সমস্ত এক লাইনে দেখায়, ওয়ার্ডপ্যাড ঠিক আছে ব্যবহার করুন।
private void SaveActionPerformed(java.awt.event.ActionEvent evt) {
String NameFile = Name.getText();
ArrayList< String > Text = new ArrayList< String >();
Text.add(TextArea.getText());
SaveFile(NameFile, Text);
}
public void SaveFile(String name, ArrayList< String> message) {
path = "C:\\Users\\Paulo Brito\\Desktop\\" + name + ".txt";
File file1 = new File(path);
try {
if (!file1.exists()) {
file1.createNewFile();
}
File[] files = file1.listFiles();
FileWriter fw = new FileWriter(file1, true);
BufferedWriter bw = new BufferedWriter(fw);
for (int i = 0; i < message.size(); i++) {
bw.write(message.get(i));
bw.newLine();
}
bw.close();
fw.close();
FileReader fr = new FileReader(file1);
BufferedReader br = new BufferedReader(fr);
fw = new FileWriter(file1, true);
bw = new BufferedWriter(fw);
while (br.ready()) {
String line = br.readLine();
System.out.println(line);
bw.write(line);
bw.newLine();
}
br.close();
fr.close();
} catch (IOException ex) {
ex.printStackTrace();
JOptionPane.showMessageDialog(null, "Error in" + ex);
}
}