পাঠ্য ফাইল থেকে একটি স্ট্রিং পড়ুন এবং লিখুন


298

একটি পাঠ্য ফাইল থেকে / থেকে আমার ডেটা পড়তে এবং লিখতে হবে, তবে কীভাবে তা নির্ধারণ করতে পারিনি।

আমি সুইফটের আইবুকটিতে এই নমুনা কোডটি পেয়েছি, তবে কীভাবে ডেটা লিখতে বা পড়তে হয় তা আমি এখনও জানি না।

import Cocoa

class DataImporter
{
    /*
    DataImporter is a class to import data from an external file.
    The class is assumed to take a non-trivial amount of time to initialize.
    */
    var fileName = "data.txt"
    // the DataImporter class would provide data importing functionality here
}

class DataManager
{
    @lazy var importer = DataImporter()
    var data = String[]()
    // the DataManager class would provide data management functionality here
}

let manager = DataManager()
manager.data += "Some data"
manager.data += "Some more data"
// the DataImporter instance for the importer property has not yet been created”

println(manager.importer.fileName)
// the DataImporter instance for the importer property has now been created
// prints "data.txt”



var str = "Hello World in Swift Language."

উত্তর:


547

পড়া এবং লেখার জন্য আপনাকে এমন একটি অবস্থান ব্যবহার করা উচিত যা লেখার যোগ্য, উদাহরণস্বরূপ নথির ডিরেক্টরি। নিম্নলিখিত কোডটি দেখায় কীভাবে একটি সাধারণ স্ট্রিং পড়তে হয় এবং লিখতে হয়। আপনি এটি খেলার মাঠে পরীক্ষা করতে পারেন।

সুইফট 3.x - 5.x

let file = "file.txt" //this is the file. we will write to and read from it

let text = "some text" //just a text

if let dir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first {

    let fileURL = dir.appendingPathComponent(file)

    //writing
    do {
        try text.write(to: fileURL, atomically: false, encoding: .utf8)
    }
    catch {/* error handling here */}

    //reading
    do {
        let text2 = try String(contentsOf: fileURL, encoding: .utf8)
    }
    catch {/* error handling here */}
}

সুইফট 2.2

let file = "file.txt" //this is the file. we will write to and read from it

let text = "some text" //just a text

if let dir = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.AllDomainsMask, true).first {
    let path = NSURL(fileURLWithPath: dir).URLByAppendingPathComponent(file)

    //writing
    do {
        try text.writeToURL(path, atomically: false, encoding: NSUTF8StringEncoding)
    }
    catch {/* error handling here */}

    //reading
    do {
        let text2 = try NSString(contentsOfURL: path, encoding: NSUTF8StringEncoding)
    }
    catch {/* error handling here */}
}

সুইফট 1.x

let file = "file.txt"

if let dirs : [String] = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.AllDomainsMask, true) as? [String] {
    let dir = dirs[0] //documents directory
    let path = dir.stringByAppendingPathComponent(file);
    let text = "some text"

    //writing
    text.writeToFile(path, atomically: false, encoding: NSUTF8StringEncoding, error: nil);

    //reading
    let text2 = String(contentsOfFile: path, encoding: NSUTF8StringEncoding, error: nil)
}

2
চলুন পাঠ্য 2 = স্ট্রিং.স্ট্রিংউইথ কনটেন্টস অফফিল (পথ) // এক্সকোড 6.0
ম্যাট ফ্রেয়ার

এই সমাধানটি ব্যবহার করে কাজ করে তবে আমি যদি ফাইলটি খুলি তবে এতে কোনও পাঠ্য নেই। আমি কি কিছু মিস করছি?
নুনো গোনালভেস

@ অ্যাডাম এই ফাইলটি কী লেট পাথ = ডায়ার স্ট্রিংবাই অ্যাপেন্ডিংপ্যাথ কম্পোনেন্ট (ফাইল) এ?
zbz.lvlv

7
এটি সরানো উচিত, কোডটি সুইফ্টের নতুন সংস্করণগুলির জন্য কাজ করে না।

1
@ বিলি_বি 29 এই লাইনের পরে কোড: //readingঠিক এটি করে।
অ্যাডাম

88

ধরে data.txtনিই যে আপনি আপনার টেক্সট ফাইলটি আপনার এক্সকোড-প্রজেক্টে স্থানান্তরিত করেছেন (ড্রাগগ্রেড ব্যবহার করুন এবং "প্রয়োজনে ফাইলগুলি অনুলিপি করুন" পরীক্ষা করুন) আপনি অবজেক্টি-সি এর মতো নিম্নলিখিতটি করতে পারেন:

let bundle = NSBundle.mainBundle()
let path = bundle.pathForResource("data", ofType: "txt")        
let content = NSString.stringWithContentsOfFile(path) as String

println(content) // prints the content of data.txt

আপডেট:
বান্ডেল (আইওএস) থেকে কোনও ফাইল পড়ার জন্য আপনি ব্যবহার করতে পারেন:

let path = NSBundle.mainBundle().pathForResource("FileName", ofType: "txt")
var text = String(contentsOfFile: path!, encoding: NSUTF8StringEncoding, error: nil)!
println(text)

সুইফট 3 এর জন্য আপডেট:

let path = Bundle.main.path(forResource: "data", ofType: "txt") // file path for file "data.txt"
var text = String(contentsOfFile: path!, encoding: NSUTF8StringEncoding, error: nil)!

সুইফট 5 এর জন্য

let path = Bundle.main.path(forResource: "ListAlertJson", ofType: "txt") // file path for file "data.txt"
let string = try String(contentsOfFile: path!, encoding: String.Encoding.utf8)

3
আইওএস প্রকল্পের জন্য, "স্ট্রিংউইথ কনটেন্টস অফফিল" অনুপলব্ধ (আইওএস 7 হিসাবে
অবহিত

1
আইওএস প্রোজেটগুলির সাথে কিছুই করার নেই, এটি অবচয় করা হয়েছে এবং
এক্সকোড .1.১

1
আপনি স্ট্রিং (সামগ্রীসমূহের
অফফিল

1
আইওএস 10 সুইফট 3 এর সাথে অনুরূপ সমাধান বান্ডিলটি এখানে
সময়কালহীন

69

এক্সকোড 8.x • সুইফট 3.x বা তার পরে

do {
    // get the documents folder url
    if let documentDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first {
        // create the destination url for the text file to be saved
        let fileURL = documentDirectory.appendingPathComponent("file.txt")
        // define the string/text to be saved
        let text = "Hello World !!!"
        // writing to disk 
        // Note: if you set atomically to true it will overwrite the file if it exists without a warning
        try text.write(to: fileURL, atomically: false, encoding: .utf8)
        print("saving was successful")
        // any posterior code goes here
        // reading from disk
        let savedText = try String(contentsOf: fileURL)
        print("savedText:", savedText)   // "Hello World !!!\n"
    }
} catch {
    print("error:", error)
}

"এরকম কোনও ফাইল নেই" এর সর্বাধিক সাধারণ ভুলগুলি কী। কারণ আমি আমার .txt ফাইলগুলিকে প্রজেক্ট ন্যাভিগেটরে যুক্ত করেছি এবং তারপরে আমি সেগুলি খোলার চেষ্টা করি আমি এই বার্তাটি পাই। (এগুলি ডেস্কটপে তৈরি করুন এবং
এটিকে

56

নতুন সহজ এবং প্রস্তাবিত পদ্ধতি: অ্যাপল ফাইলহ্যান্ডলিংয়ের জন্য ইউআরএল ব্যবহার করার পরামর্শ দেয় এবং অন্যান্য সমাধানগুলি এখানে অবহেলিত বলে মনে হয় (নীচে মন্তব্যগুলি দেখুন)। নিম্নলিখিতটি ইউআরএলগুলির সাথে পড়ার এবং লেখার নতুন সহজ উপায় (সম্ভাব্য ইউআরএল ত্রুটিগুলি পরিচালনা করতে ভুলবেন না):

সুইফ্ট 5+, 4 এবং 3.1

import Foundation  // Needed for those pasting into Playground

let fileName = "Test"
let dir = try? FileManager.default.url(for: .documentDirectory, 
      in: .userDomainMask, appropriateFor: nil, create: true)

// If the directory was found, we write a file to it and read it back
if let fileURL = dir?.appendingPathComponent(fileName).appendingPathExtension("txt") {

    // Write to the file named Test
    let outString = "Write this text to the file"
    do {
        try outString.write(to: fileURL, atomically: true, encoding: .utf8)
    } catch {
        print("Failed writing to URL: \(fileURL), Error: " + error.localizedDescription)
    }

    // Then reading it back from the file
    var inString = ""
    do {
        inString = try String(contentsOf: fileURL)
    } catch {
        print("Failed reading from URL: \(fileURL), Error: " + error.localizedDescription)
    }
    print("Read from the file: \(inString)")
}

1
আপনি কি এমন কোনও রেফারেন্স সরবরাহ করতে পারেন যেখানে অ্যাপল এ জাতীয় প্রস্তাব দেয়। বা আপনি কেন আরও প্রস্তাবিত উপায়টি সম্পর্কে আরও কিছুটা ব্যাখ্যা করতে পারেন?
আন্দ্রেজ

6
@ আন্ড্রেজ "ইউআরএল অবজেক্টগুলি স্থানীয় ফাইলগুলিকে উল্লেখ করার পছন্দের উপায়। developer.apple.com/library/ios/documentation/Cocoa/Reference/...
Sverrisson

1
আপনাকে ত্রুটিগুলি এনএসইররর হিসাবে কাস্ট করতে হবে না, এমনকি "ক্যাট লেট এন্টারও" ব্যবহার করতে হবে না। আপনি কেবল ধরতে পারেন এবং আপনি ত্রুটি ভেরিয়েবলটি বিনামূল্যে পান।
cuomo456

@ cuomo456 আপনার ডান আমি এটি সরিয়ে দিচ্ছি, এটি পূর্ববর্তী সুইফ্ট বিটা থেকে একটি বাকী।
সোভেরিসসন

1
@ অলশকম্পিলার তৈরি করুন: ফাইলম্যানেজারটি ডিরেক্টরি তৈরি করতে সত্যই অবহিত করে যদি এটি ইতিমধ্যে না থাকে তবে ব্যর্থ হওয়ার পরিবর্তে
সার্ভিসসন

28

এক্সকোড 8, অ্যাপ্লিকেশন বান্ডেল থেকে ফাইলটি পড়ার জন্য সুইফট 3 উপায়:

if let path = Bundle.main.path(forResource: filename, ofType: nil) {
    do {
        let text = try String(contentsOfFile: path, encoding: String.Encoding.utf8)
        print(text)
    } catch {
        printError("Failed to read text from \(filename)")
    }
} else {
    printError("Failed to load file from app bundle \(filename)")
} 

এখানে একটি সুবিধাজনক অনুলিপি এবং পেস্ট এক্সটেনশন

public extension String {
    func contentsOrBlank()->String {
        if let path = Bundle.main.path(forResource:self , ofType: nil) {
            do {
                let text = try String(contentsOfFile:path, encoding: String.Encoding.utf8)
                return text
                } catch { print("Failed to read text from bundle file \(self)") }
        } else { print("Failed to load file from bundle \(self)") }
        return ""
    }
    }

উদাহরণ স্বরূপ

let t = "yourFile.txt".contentsOrBlank()

আপনি প্রায় সর্বদা লাইনগুলির একটি অ্যারে চান:

let r:[String] = "yourFile.txt"
     .contentsOrBlank()
     .characters
     .split(separator: "\n", omittingEmptySubsequences:ignore)
     .map(String.init)

2
আমি একটি কুশলী এক্সটেনশন @crashalot মধ্যে আটকানো - মুছে ফেলতে বিনামূল্যে চিয়ার্স মনে
Fattie

1
নিবন্ধন করুন আপনি একটি ফাইল বন্ডলে লিখতে পারবেন না।
সোভেরিসসন

আমি ফাইলটি পড়ার বিষয়ে কথা বলছিলাম, ফাইলটি প্রকল্পের ফাইলগুলিতে থাকলে এটিই আমার সাথে কাজ করেছিল
আলশ সংকলক

10

আমি আপনাকে কেবল প্রথম অংশটি দেখাতে চাই, এটি পঠিত । আপনি কীভাবে সহজভাবে পড়তে পারেন তা এখানে:

সুইফট 3:

let s = try String(contentsOfFile: Bundle.main.path(forResource: "myFile", ofType: "txt")!)

সুইফট 2:

let s = try! String(contentsOfFile: NSBundle.mainBundle().pathForResource("myFile", ofType: "txt")!)

5

সুইফট> ৪.০ এ ফাইল পড়ার সহজ উপায়

 let path = Bundle.main.path(forResource: "data", ofType: "txt") // file path for file "data.txt"
        do {
            var text = try String(contentsOfFile: path!)
        }
        catch(_){print("error")}
    }

3

উপরে অ্যাডামের বর্তমান গৃহীত উত্তরে আমার কিছু ত্রুটি ছিল কিন্তু আমি এখানে তার উত্তরটি পুনরায় কাজ করেছিলাম এবং আমার পক্ষে এই কাজটি করেছিলাম।

let file = "file.txt"

let dirs: [String]? = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.AllDomainsMask, true) as? [String]

if (dirs != nil) {
    let directories:[String] = dirs!
    let dirs = directories[0]; //documents directory
    let path = dirs.stringByAppendingPathComponent(file);
    let text = "some text"

    //writing
    text.writeToFile(path, atomically: false, encoding: NSUTF8StringEncoding, error: nil);

    //reading
     var error:NSError?

    //reading
    let text2 = String(contentsOfFile: path, encoding:NSUTF8StringEncoding, error: &error)

    if let theError = error {
        print("\(theError.localizedDescription)")
    }
}

3

আপনি এই সরঞ্জামটি কেবল সুইফটে ফাইল থেকে পড়তে না পারার সাথে আপনার ইনপুটটিকে বিশ্লেষণ করতেও দরকারী বলে মনে করতে পারেন: https://github.com/shoumikhin/StreamScanner

কেবল ফাইল পথ এবং ডেটা ডিলিমিটারগুলি এর মতো নির্দিষ্ট করুন:

import StreamScanner

if let input = NSFileHandle(forReadingAtPath: "/file/path")
{
    let scanner = StreamScanner(source: input, delimiters: NSCharacterSet(charactersInString: ":\n"))  //separate data by colons and newlines

    while let field: String = scanner.read()
    {
        //use field
    }
}

আশাকরি এটা সাহায্য করবে.


2

আমাকে এইভাবে পুনর্নির্মাণ করতে হয়েছিল:

let path = NSBundle.mainBundle().pathForResource("Output_5", ofType: "xml")
let text = try? NSString(contentsOfFile: path! as String, encoding: NSUTF8StringEncoding)
print(text)

2

ফাংশন উদাহরণে, (পড়ুন | লিখুন) ডকুমেন্টসফর্মফাইলে (...) কিছু ফাংশন র‌্যাপস থাকা অবশ্যই বোধগম্য বলে মনে হয় যেহেতু ওএসএক্স এবং আইওএসের সমস্ত কিছুর জন্য তিন বা চারটি প্রধান শ্রেণি ইনস্ট্যান্টিয়েটেড এবং গুচ্ছ বৈশিষ্ট্য, কনফিগার করা, সংযুক্ত, 182 টি দেশে কেবল একটি ফাইলের জন্য "হাই" লিখতে ইনস্ট্যান্টেশনযুক্ত এবং সেট করা হয়েছে।

যাইহোক, এই উদাহরণগুলি বাস্তব প্রোগ্রামে ব্যবহারের জন্য যথেষ্ট পরিপূর্ণ নয়। রাইটিং ফাংশনটি ফাইলটিতে তৈরি বা লেখার ক্ষেত্রে কোনও ত্রুটির প্রতিবেদন করে না। পড়ার সময়, আমি মনে করি না যে কোনও ত্রুটি যে ফাইলটি স্ট্রিং হিসাবে উপস্থিত নেই বলে মনে করা হয় যেটি পড়েছিল এমন ডেটা ধারণ করে return আপনি জানতে চান যে এটি ব্যর্থ হয়েছে এবং কেন, কিছু ব্যতিক্রমের মতো বিজ্ঞপ্তি ব্যবস্থার মাধ্যমে। তারপরে, আপনি এমন কিছু কোড লিখতে পারেন যা সমস্যাটি কীভাবে ফলাফল দেয় এবং ব্যবহারকারীকে এটি সংশোধন করতে দেয় বা "সঠিকভাবে" সেই মুহূর্তে প্রোগ্রামটি ভেঙে দেয়।

আপনি এটিতে "ত্রুটিযুক্ত ফাইলের অস্তিত্ব নেই" দিয়ে একটি স্ট্রিং ফিরিয়ে দিতে চান না। তারপরে, আপনাকে প্রতিবার কলিং ফাংশন থেকে স্ট্রিংয়ের ত্রুটিটি খুঁজতে হবে এবং সেখানে এটি পরিচালনা করতে হবে। ত্রুটিটির স্ট্রিংটি প্রকৃত ফাইল থেকে আসলে পড়েছিল কিনা, বা এটি আপনার কোড থেকে উত্পন্ন হয়েছিল তা আপনি সম্ভবত বলতে পারবেন না।

আপনি এমনকি সুইড ২.২ এবং এক্সকোড .3.৩ এ এই জাতীয় পাঠ্যকে কল করতে পারবেন না কারণ এনএসএসটিং (বিষয়বস্তু অফফিল ...) একটি ব্যতিক্রম ছুঁড়েছে। এটি ধরার জন্য কোনও কোড না থাকলে এবং এটি দিয়ে স্টাডআউটে প্রিন্ট করা, বা আরও ভাল, একটি ত্রুটি পপআপ উইন্ডো, বা স্টেডার এর মতো কিছু না করা থাকলে এটি একটি সংকলন সময় ত্রুটি। আমি শুনেছি অ্যাপল ক্যাপচার এবং ব্যাতিক্রমের চেষ্টা থেকে দূরে চলেছে, তবে এটি একটি দীর্ঘ পদক্ষেপ হতে চলেছে এবং এটি ছাড়া কোড লেখা সম্ভব নয়। আমি জানি না যে & ত্রুটি যুক্তিটি কোথা থেকে এসেছে, সম্ভবত এটি একটি পুরানো সংস্করণ, তবে এনএসএসটিং.উরাইটটো [ফাইল | ইউআরএল] বর্তমানে এনএসইরর যুক্তি নেই। এগুলি এনএসএসস্ট্রিং.এর মতো সংজ্ঞায়িত করা হয়েছে:

public func writeToURL(url: NSURL, atomically useAuxiliaryFile: Bool, encoding enc: UInt) throws
public func writeToFile(path: String, atomically useAuxiliaryFile: Bool, encoding enc: UInt) throws
public convenience init(contentsOfURL url: NSURL, encoding enc: UInt) throws
public convenience init(contentsOfFile path: String, encoding enc: UInt) throws

এছাড়াও, ফাইলটি বিদ্যমান নেই এমন একটি সম্ভাব্য সমস্যাগুলির মধ্যে একটি যা আপনার প্রোগ্রামে কোনও ফাইল পড়তে পারে যেমন কোনও অনুমতি সমস্যা, ফাইলের আকার বা এমন অনেকগুলি সমস্যা যা আপনি এমনকি কোনও হ্যান্ডলারের কোডও চেষ্টা করতে চান না would তাদের প্রতিটি। কেবলমাত্র এটি সমস্ত সঠিক বলে ধরে নেওয়া ভাল এবং ধরা এবং মুদ্রণ করা, বা হ্যান্ডেল করা, যদি কিছু ভুল না ঘটে তবে একটি ব্যতিক্রম, এই মুহুর্তে, আপনার আর কোনও উপায় নেই।

এখানে আমার পুনর্লিখনগুলি:

func writeToDocumentsFile(fileName:String,value:String) {

    let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as NSString!
    let path = documentsPath.stringByAppendingPathComponent(fileName)

    do {
        try value.writeToFile(path, atomically: true, encoding: NSUTF8StringEncoding)
    } catch let error as NSError {
        print("ERROR : writing to file \(path) : \(error.localizedDescription)")
    }

}

func readFromDocumentsFile(fileName:String) -> String {

    let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as NSString
    let path = documentsPath.stringByAppendingPathComponent(fileName)

    var readText : String = ""

    do {
        try readText = NSString(contentsOfFile: path, encoding: NSUTF8StringEncoding) as String
    }
    catch let error as NSError {
        print("ERROR : reading from file \(fileName) : \(error.localizedDescription)")
    }
    return readText
}

আপনার অনেক প্রতিক্রিয়ার মধ্যে আমি মনে করি আপনি আমার বক্তব্যটি আঁকছেন না। (বা আপনি যত্ন নাও করতে পারেন এবং এটি ঠিক আছে)। তবে, স্পষ্টরূপে বলতে গেলে একটি ব্যতিক্রম ছুঁড়ে ফেলা এবং কোনওরকমভাবে হ্যান্ডেল করা যখন আপনি সেখানে নেই এমন কোনও ফাইল সন্ধান করছেন (বা অনুমতি সম্পর্কিত কোনও সমস্যা রয়েছে) "ERROR: ফাইল [ফাইলের নাম] এর মতো স্ট্রিং ফিরে আসার চেয়ে অনেক ভাল is আপনার ফাইলটি যে স্ট্রিংটি পড়ার কথা ছিল সেটির অস্তিত্ব নেই। তারপরে ঠিক যে মুদ্রণ। যদি আপনার কিছু ব্যতিক্রমের বিবরণ মুদ্রণ করা উচিত তবে স্ট্রিং পড়তে ব্যর্থ নয় যা এখন এতে ত্রুটি রয়েছে program প্রোগ্রামটি সম্ভবত কেবল চালিয়ে যাওয়া উচিত নয়।
স্যাম অ্যালেন


2

বিভ্রান্তি এড়াতে এবং স্বাচ্ছন্দ্য যোগ করতে, ডকুমেন্ট ডিরেক্টরিতে ফাইলগুলিতে স্ট্রিং পড়া এবং লেখার জন্য দুটি ফাংশন তৈরি করেছি। ফাংশনগুলি এখানে:

func writeToDocumentsFile(fileName:String,value:String) {
    let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as! NSString
    let path = documentsPath.stringByAppendingPathComponent(fileName)
    var error:NSError?
    value.writeToFile(path, atomically: true, encoding: NSUTF8StringEncoding, error: &error)
}

func readFromDocumentsFile(fileName:String) -> String {
    let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as! NSString
    let path = documentsPath.stringByAppendingPathComponent(fileName)
    var checkValidation = NSFileManager.defaultManager()
    var error:NSError?
    var file:String

    if checkValidation.fileExistsAtPath(path) {
        file = NSString(contentsOfFile: path, encoding: NSUTF8StringEncoding, error: nil) as! String
    } else {
        file = "*ERROR* \(fileName) does not exist."
    }

    return file
}

এখানে তাদের ব্যবহারের উদাহরণ:

writeToDocumentsFile("MyText.txt","Hello world!")

let value = readFromDocumentsFile("MyText.txt")
println(value)  //Would output 'Hello world!'

let otherValue = readFromDocumentsFile("SomeText.txt")
println(otherValue)  //Would output '*ERROR* SomeText.txt does not exist.'

আশাকরি এটা সাহায্য করবে!

এক্সকোড সংস্করণ: 6.3.2


2

সর্বশেষতম swift3 কোড
আপনি পাঠ্য ফাইল থেকে ডেটা পড়তে পারেন কেবল নমো কোডটি ব্যবহার করুন এটি আমার পাঠ্য ফাইল

     {
"NumberOfSlices": "8",
"NrScenes": "5",
"Scenes": [{
           "dataType": "label1",
           "image":"http://is3.mzstatic.com/image/thumb/Purple19/v4/6e/81/31/6e8131cf-2092-3cd3-534c-28e129897ca9/mzl.syvaewyp.png/53x53bb-85.png",

           "value": "Hello",
           "color": "(UIColor.red)"
           }, {
           "dataType": "label2",
           "image":"http://is1.mzstatic.com/image/thumb/Purple71/v4/6c/4c/c1/6c4cc1bc-8f94-7b13-f3aa-84c41443caf3/mzl.hcqvmrix.png/53x53bb-85.png",
           "value": "Hi There",
           "color": "(UIColor.blue)"
           }, {
           "dataType": "label3",
           "image":"http://is1.mzstatic.com/image/thumb/Purple71/v4/6c/4c/c1/6c4cc1bc-8f94-7b13-f3aa-84c41443caf3/mzl.hcqvmrix.png/53x53bb-85.png",

           "value": "hi how r u ",
           "color": "(UIColor.green)"
           }, {
           "dataType": "label4",
           "image":"http://is1.mzstatic.com/image/thumb/Purple71/v4/6c/4c/c1/6c4cc1bc-8f94-7b13-f3aa-84c41443caf3/mzl.hcqvmrix.png/53x53bb-85.png",
           "value": "what are u doing  ",
           "color": "(UIColor.purple)"
           }, {
           "dataType": "label5",
          "image":"http://is1.mzstatic.com/image/thumb/Purple71/v4/6c/4c/c1/6c4cc1bc-8f94-7b13-f3aa-84c41443caf3/mzl.hcqvmrix.png/53x53bb-85.png",
           "value": "how many times ",
           "color": "(UIColor.white)"
           }, {
           "dataType": "label6",
           "image":"http://is1.mzstatic.com/image/thumb/Purple71/v4/5a/f3/06/5af306b0-7cac-1808-f440-bab7a0d18ec0/mzl.towjvmpm.png/53x53bb-85.png",
           "value": "hi how r u ",
           "color": "(UIColor.blue)"
           }, {
           "dataType": "label7",
           "image":"http://is5.mzstatic.com/image/thumb/Purple71/v4/a8/dc/eb/a8dceb29-6daf-ca0f-d037-df9f34cdc476/mzl.ukhhsxik.png/53x53bb-85.png",
           "value": "hi how r u ",
           "color": "(UIColor.gry)"
           }, {
           "dataType": "label8",
           "image":"http://is2.mzstatic.com/image/thumb/Purple71/v4/15/23/e0/1523e03c-fff2-291e-80a7-73f35d45c7e5/mzl.zejcvahm.png/53x53bb-85.png",
           "value": "hi how r u ",
           "color": "(UIColor.brown)"
           }]

}

আপনি এই কোডটি ব্যবহার করতে পারেন আপনি সুইফট 3-এ টেক্সট জেসন ফাইল থেকে ডেটা পাবেন

     let filePath = Bundle.main.path(forResource: "nameoftheyourjsonTextfile", ofType: "json")


    let contentData = FileManager.default.contents(atPath: filePath!)
    let content = NSString(data: contentData!, encoding: String.Encoding.utf8.rawValue) as? String

    print(content)
    let json = try! JSONSerialization.jsonObject(with: contentData!) as! NSDictionary
    print(json)
    let app = json.object(forKey: "Scenes") as! NSArray!
    let _ : NSDictionary
    for dict in app! {
        let colorNam = (dict as AnyObject).object(forKey: "color") as! String
        print("colors are \(colorNam)")

       // let colour = UIColor(hexString: colorNam) {
       // colorsArray.append(colour.cgColor)
       // colorsArray.append(colorNam  as! UIColor)

        let value = (dict as AnyObject).object(forKey: "value") as! String
        print("the values are \(value)")
        valuesArray.append(value)

        let images = (dict as AnyObject).object(forKey: "image") as! String
        let url = URL(string: images as String)
        let data = try? Data(contentsOf: url!)
        print(data)
        let image1 = UIImage(data: data!)! as UIImage
        imagesArray.append(image1)
         print(image1)
            }


1

ViewDidLoad এ লিখুন

var error: NSError?
var paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)
var documentsDirectory = paths.first as String
var dataPath = documentsDirectory.stringByAppendingPathComponent("MyFolder")

if !NSFileManager.defaultManager().fileExistsAtPath(dataPath) {
    NSFileManager.defaultManager().createDirectoryAtPath(dataPath, withIntermediateDirectories: false, attributes: nil, error: &error)
} else {
    println("not creted or exist")
}

func listDocumentDirectoryfiles() -> [String] {
    if let documentDirectory = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first as? String {
        let myFilePath = documentDirectory.stringByAppendingPathComponent("MyFolder")
        return NSFileManager.defaultManager().contentsOfDirectoryAtPath(myFilePath, error: nil) as [String]
    }
    return []
}

1

পূর্বের সমাধানগুলি প্রশ্নের উত্তর দেয়, তবে আমার ক্ষেত্রে লেখার সময় ফাইলের পুরানো সামগ্রী মুছে ফেলা একটি সমস্যা ছিল।

সুতরাং, আমি পূর্ববর্তী বিষয়বস্তু মোছা না করে ডকুমেন্ট ডিরেক্টরিতে ফাইল লিখতে কোডের টুকরো তৈরি করেছি। আপনার সম্ভবত পরিচালনা করার জন্য আরও ভাল ত্রুটির প্রয়োজন, তবে আমি বিশ্বাস করি এটি ভাল সূচনা পয়েন্ট। সুইফট ৪. ভাষা:

    let filename = "test.txt"
    createOrOverwriteEmptyFileInDocuments(filename: filename)
    if let handle = getHandleForFileInDocuments(filename: filename) {
        writeString(string: "aaa", fileHandle: handle)
        writeString(string: "bbb", fileHandle: handle)
        writeString(string: "\n", fileHandle: handle)
        writeString(string: "ccc", fileHandle: handle)
    }

সহায়ক পদ্ধতি:

func createOrOverwriteEmptyFileInDocuments(filename: String){
    guard let dir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else {
        debugPrint("ERROR IN createOrOverwriteEmptyFileInDocuments")
        return
    }
    let fileURL = dir.appendingPathComponent(filename)
    do {
        try "".write(to: fileURL, atomically: true, encoding: .utf8)
    }
    catch {
        debugPrint("ERROR WRITING STRING: " + error.localizedDescription)
    }
    debugPrint("FILE CREATED: " + fileURL.absoluteString)
}

private func writeString(string: String, fileHandle: FileHandle){
    let data = string.data(using: String.Encoding.utf8)
    guard let dataU = data else {
        debugPrint("ERROR WRITING STRING: " + string)
        return
    }
    fileHandle.seekToEndOfFile()
    fileHandle.write(dataU)
}

private func getHandleForFileInDocuments(filename: String)->FileHandle?{
    guard let dir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else {
        debugPrint("ERROR OPENING FILE")
        return nil
    }
    let fileURL = dir.appendingPathComponent(filename)
    do {
        let fileHandle: FileHandle? = try FileHandle(forWritingTo: fileURL)
        return fileHandle
    }
    catch {
        debugPrint("ERROR OPENING FILE: " + error.localizedDescription)
        return nil
    }
}

1

সুইফট 3.x - 5.x

সর্বোত্তম উদাহরণ হ'ল Logfileএকটি এক্সটেনশন সহ লোকাল তৈরি করা .txt যা দৃশ্যমান এবং এর মধ্যে প্রদর্শিত হতে পারে"Files App" বর্তমান তারিখ এবং সময় যেমন একটি ফাইলের নাম দিয়ে

এই তথ্যটি কেবল এই কোডটি যুক্ত করুন p

  UIFileSharingEnabled
  LSSupportsOpeningDocumentsInPlace

এবং এই ফাংশন নীচে

var logfileName : String = ""
func getTodayString() -> String{

    let date = Date()
    let calender = Calendar.current
    let components = calender.dateComponents([.year,.month,.day,.hour,.minute,.second], from: date)

    let year = components.year
    let month = components.month
    let day = components.day
    let hour = components.hour
    let minute = components.minute
    let second = components.second

    let today_string = String(year!) + "-" + String(month!) + "-" + String(day!) + "-" + String(hour!)  + "" + String(minute!) + "" +  String(second!)+".txt"

    return today_string

}

func LogCreator(){
    logfileName = getTodayString()

    print("LogCreator: Logfile Generated Named: \(logfileName)")

    let file = logfileName //this is the file. we will write to and read from it

    let text = "some text" //just a text

    if let dir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first {

        let fileURL = dir.appendingPathComponent(file)
        let documentPath = NSSearchPathForDirectoriesInDomains(.documentDirectory,.userDomainMask, true)[0]
        print("LogCreator: The Logs are Stored at location \(documentPath)")


        //writing
        do {
            try text.write(to: fileURL, atomically: false, encoding: .utf8)
        }
        catch {/* error handling here */}

        //reading
        do {
            let text2 = try String(contentsOf: fileURL, encoding: .utf8)
            print("LogCreator: The Detail log are :-\(text2)")
        }
        catch {/* error handling here */}
    }
}


  [1]: https://i.stack.imgur.com/4eg12.png

আমি এটি চেষ্টা করেছিলাম, তবে অবশ্যই কিছু মিস করেছি। এটি আমার দস্তাবেজটি সংরক্ষণ করে এবং এটি ফাইলটিতে রাখে: /// ভার / মোবাইল / ধারক / ডেটা / অ্যাপ্লিকেশন / E4BF1065-3B48-4E53-AC1D-0DC893CCB498 / নথি / তবে আমি এটি ফাইলগুলিতে খুঁজে পাই না।
ব্যবহারকারী 3069232

1
আমি এই কীটি মিস করেছি ... <key> CFBundleDisplayName </key> <string> {{PRODUCT_NAME} </string> iOS 13 এ কাজ করেছে, সুইফট 5
ব্যবহারকারী 3069232

0
 func writeToDocumentsFile(fileName:String,value:String) {
    let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as NSString
    let path = documentsPath.appendingPathComponent(fileName)
    do{
    try value.write(toFile: path, atomically: true, encoding: String.Encoding.utf8)
}catch{
    }
    }

func readFromDocumentsFile(fileName:String) -> String {
    let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as NSString
    let path = documentsPath.appendingPathComponent(fileName)
    let checkValidation = FileManager.default
    var file:String

    if checkValidation.fileExists(atPath: path) {
        do{
       try file = NSString(contentsOfFile: path, encoding: String.Encoding.utf8.rawValue) as String
        }catch{
            file = ""
        }
        } else {
        file = ""
    }

    return file
}

0

Xcode 8.3.2 সুইফট 3.x । এনএসকিডআরচিভার এবং এনএসকিডআনারচিভার ব্যবহার করে

নথি থেকে ফাইল পড়া

let documentsDirectoryPathString = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first!
let documentsDirectoryPath = NSURL(string: documentsDirectoryPathString)!
let jsonFilePath = documentsDirectoryPath.appendingPathComponent("Filename.json")

let fileManager = FileManager.default
var isDirectory: ObjCBool = false

if fileManager.fileExists(atPath: (jsonFilePath?.absoluteString)!, isDirectory: &isDirectory) {

let finalDataDict = NSKeyedUnarchiver.unarchiveObject(withFile: (jsonFilePath?.absoluteString)!) as! [String: Any]
}
else{
     print("File does not exists")
}

নথিগুলিতে ফাইল লিখুন

NSKeyedArchiver.archiveRootObject(finalDataDict, toFile:(jsonFilePath?.absoluteString)!)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.