{"componentChunkName":"component---src-pages-markdown-remark-fields-slug-js","path":"/engineering/read-and-write-in-a-local-file-with-deno/","result":{"data":{"markdownRemark":{"id":"4eaf938c-ad64-5743-b4d2-a17da0b02771","excerpt":"In this blog, we will see how we can read and write into a local file with the help of Deno First, we will create a program which will read multiple quotes from…","html":"<p>In this blog, we will see how we can read and write into a local file with the help of Deno</p>\n<ul>\n<li>First, we will create a program which will read multiple quotes from a text file and then print a random quote on our screen </li>\n<li>Then we will take input from the user in the command line and write those inputs in a text file </li>\n</ul>\n<h2 id=\"before-you-get-started\" style=\"position:relative;\"><a href=\"#before-you-get-started\" aria-label=\"before you get started permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Before You Get Started</h2>\n<p>This tutorial assumes you have basic knowledge about Deno and you have latest Deno version installed on your system, if you haven't installed Deno on your system or never ran Deno code please look at this great introductory blog - <a href=\"/hello-world-deno/\">Hello world with Deno</a> </p>\n<h3 id=\"part-1-read-a-file-and-print-text-out-of-it\" style=\"position:relative;\"><a href=\"#part-1-read-a-file-and-print-text-out-of-it\" aria-label=\"part 1 read a file and print text out of it permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Part 1: Read a file and print text out of it</h3>\n<p>First, add a file called quotes.txt in the folder you want to run the Deno code, We will read these quotes with the help of Deno</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"0\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">Don&#39;t worry about what anybody else is going to do. The best way to predict the future is to invent it. - Alan Kay</span>\n<span class=\"grvsc-line\">Premature optimization is the root of all evil in programming. - Donald Knuth</span>\n<span class=\"grvsc-line\">Clarity and brevity sometimes are at odds. When they are, I choose clarity.  - Jacob Kaplan-Moss</span>\n<span class=\"grvsc-line\">Optimism is an occupational hazard of programming; feedback is the treatment. - Kent Beck</span>\n<span class=\"grvsc-line\">A lot of times, people don&#39;t know what they want until you show it to them.  - Steve Jobs</span>\n<span class=\"grvsc-line\">Nine people can&#39;t make a baby in a month. - Fred Brooks</span>\n<span class=\"grvsc-line\">A clever person solves a problem. A wise person avoids it. - Albert Einstein</span></code></pre>\n<p>And then create an index.ts file in which we will write Deno code, we can also write Deno code in javascript instead of Typescript, but as Deno is built on TypeScript we are using Typescript here</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"javascript\" data-index=\"1\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"mtk4\">const</span><span class=\"mtk1\"> </span><span class=\"mtk11\">getQuotes</span><span class=\"mtk1\"> = </span><span class=\"mtk4\">async</span><span class=\"mtk1\"> (</span><span class=\"mtk12\">fileName</span><span class=\"mtk1\">: </span><span class=\"mtk10\">string</span><span class=\"mtk1\">): </span><span class=\"mtk10\">Promise</span><span class=\"mtk1\">&lt;</span><span class=\"mtk10\">Array</span><span class=\"mtk1\">&lt;</span><span class=\"mtk10\">string</span><span class=\"mtk1\">&gt;&gt; </span><span class=\"mtk4\">=&gt;</span><span class=\"mtk1\"> {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\"> </span><span class=\"mtk4\">const</span><span class=\"mtk1\"> </span><span class=\"mtk12\">decoder</span><span class=\"mtk1\"> = </span><span class=\"mtk4\">new</span><span class=\"mtk1\"> </span><span class=\"mtk10\">TextDecoder</span><span class=\"mtk1\">(</span><span class=\"mtk8\">&quot;utf-8&quot;</span><span class=\"mtk1\">);</span></span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\"> </span><span class=\"mtk4\">const</span><span class=\"mtk1\"> </span><span class=\"mtk12\">text</span><span class=\"mtk1\">: </span><span class=\"mtk10\">string</span><span class=\"mtk1\"> = </span><span class=\"mtk12\">decoder</span><span class=\"mtk1\">.</span><span class=\"mtk11\">decode</span><span class=\"mtk1\">(</span><span class=\"mtk15\">await</span><span class=\"mtk1\"> </span><span class=\"mtk12\">Deno</span><span class=\"mtk1\">.</span><span class=\"mtk11\">readFile</span><span class=\"mtk1\">(</span><span class=\"mtk12\">fileName</span><span class=\"mtk1\">));</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\"> </span><span class=\"mtk15\">return</span><span class=\"mtk1\"> </span><span class=\"mtk12\">text</span><span class=\"mtk1\">.</span><span class=\"mtk11\">split</span><span class=\"mtk1\">(</span><span class=\"mtk8\">&quot;</span><span class=\"mtk6\">\\n</span><span class=\"mtk8\">&quot;</span><span class=\"mtk1\">);</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">};</span></span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\"><span class=\"mtk4\">const</span><span class=\"mtk1\"> </span><span class=\"mtk12\">quotesArr</span><span class=\"mtk1\">: </span><span class=\"mtk10\">Array</span><span class=\"mtk1\">&lt;</span><span class=\"mtk10\">string</span><span class=\"mtk1\">&gt; = </span><span class=\"mtk15\">await</span><span class=\"mtk1\"> </span><span class=\"mtk11\">getQuotes</span><span class=\"mtk1\">(</span><span class=\"mtk8\">&quot;quotes.txt&quot;</span><span class=\"mtk1\">);</span></span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\"><span class=\"mtk4\">const</span><span class=\"mtk1\"> </span><span class=\"mtk12\">randomQuote</span><span class=\"mtk1\">: </span><span class=\"mtk10\">string</span><span class=\"mtk1\"> =  </span><span class=\"mtk12\">quotesArr</span><span class=\"mtk1\">[</span><span class=\"mtk10\">Math</span><span class=\"mtk1\">.</span><span class=\"mtk11\">floor</span><span class=\"mtk1\">(</span><span class=\"mtk10\">Math</span><span class=\"mtk1\">.</span><span class=\"mtk11\">random</span><span class=\"mtk1\">() * </span><span class=\"mtk12\">quotesArr</span><span class=\"mtk1\">.</span><span class=\"mtk12\">length</span><span class=\"mtk1\">)];</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk10\">console</span><span class=\"mtk1\">.</span><span class=\"mtk11\">log</span><span class=\"mtk1\">(</span><span class=\"mtk12\">randomQuote</span><span class=\"mtk1\">);</span></span></code></pre>\n<p>In the getQuotes function, we are using  Deno.readFile #readfile to read the contents of a file as an array of bytes and using <code>TextDecoder</code> to convert the bytes to string and then splitting it in a string array and return</p>\n<p>Then we are just picking a <code>randomQuote</code> with <code>Math.random</code> and <code>console.log</code> that on our screen</p>\n<p>To run the above code we need to put <code>--allow-read</code> flag in our command as shown below because we need to access the local filesystem to read the file.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"2\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">deno run --allow-read index.ts</span></code></pre>\n<p>Deno is secure by default, with no file, network, or environment access unless explicitly enabled. You can run <code>deno run --help</code> to see  all the available flags for different permissions</p>\n<p>Once your program run initially you will see that Deno is compiling the index.ts file and printing a random quote from quotes.txt, if you run the programme again without changing the code it will not compile it again and will just show another random quote.</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"3\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">deno run --allow-read index.ts</span>\n<span class=\"grvsc-line\">Compile file:///C:/Users/PuneetSingh/Documents/deno_fs/index.ts</span>\n<span class=\"grvsc-line\">Premature optimization is the root of all evil in programming. - Donald Knuth</span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\">deno run --allow-read index.ts</span>\n<span class=\"grvsc-line\">A lot of times, people don&#39;t know what they want until you show it to them.  - Steve Jobs</span></code></pre>\n<h3 id=\"part-2-create-a-file-and-write-text-in-it\" style=\"position:relative;\"><a href=\"#part-2-create-a-file-and-write-text-in-it\" aria-label=\"part 2 create a file and write text in it permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Part 2: Create a file and write text in it</h3>\n<p>Let's create another TypeScript file write.ts and put the below code in it</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"javascript\" data-index=\"4\"><code class=\"grvsc-code\"><span class=\"grvsc-line\"><span class=\"mtk15\">import</span><span class=\"mtk1\"> { </span><span class=\"mtk12\">readLines</span><span class=\"mtk1\"> } </span><span class=\"mtk15\">from</span><span class=\"mtk1\"> </span><span class=\"mtk8\">&quot;https://deno.land/std@v0.52.0/io/bufio.ts&quot;</span><span class=\"mtk1\">;</span></span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\"><span class=\"mtk10\">console</span><span class=\"mtk1\">.</span><span class=\"mtk11\">log</span><span class=\"mtk1\">(</span><span class=\"mtk8\">&#39;Start typing...&#39;</span><span class=\"mtk1\">);</span></span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\"><span class=\"mtk4\">const</span><span class=\"mtk1\"> </span><span class=\"mtk12\">encoder</span><span class=\"mtk1\"> = </span><span class=\"mtk4\">new</span><span class=\"mtk1\"> </span><span class=\"mtk10\">TextEncoder</span><span class=\"mtk1\">();</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk15\">await</span><span class=\"mtk1\"> </span><span class=\"mtk12\">Deno</span><span class=\"mtk1\">.</span><span class=\"mtk11\">writeFile</span><span class=\"mtk1\">(</span><span class=\"mtk8\">&quot;input.txt&quot;</span><span class=\"mtk1\">, </span><span class=\"mtk4\">new</span><span class=\"mtk1\"> </span><span class=\"mtk10\">Uint8Array</span><span class=\"mtk1\">());</span></span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\"><span class=\"mtk3\">// Listen to stdin input by readLines</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk15\">for</span><span class=\"mtk1\"> </span><span class=\"mtk15\">await</span><span class=\"mtk1\">(</span><span class=\"mtk4\">const</span><span class=\"mtk1\"> </span><span class=\"mtk12\">line</span><span class=\"mtk1\"> </span><span class=\"mtk4\">of</span><span class=\"mtk1\"> </span><span class=\"mtk11\">readLines</span><span class=\"mtk1\">(</span><span class=\"mtk12\">Deno</span><span class=\"mtk1\">.</span><span class=\"mtk12\">stdin</span><span class=\"mtk1\">)) {</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">   </span><span class=\"mtk4\">const</span><span class=\"mtk1\"> </span><span class=\"mtk12\">data</span><span class=\"mtk1\"> = </span><span class=\"mtk12\">encoder</span><span class=\"mtk1\">.</span><span class=\"mtk11\">encode</span><span class=\"mtk1\">(</span><span class=\"mtk12\">line</span><span class=\"mtk1\">+</span><span class=\"mtk8\">&quot;</span><span class=\"mtk6\">\\n</span><span class=\"mtk8\">&quot;</span><span class=\"mtk1\">);</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">   </span><span class=\"mtk15\">await</span><span class=\"mtk1\"> </span><span class=\"mtk12\">Deno</span><span class=\"mtk1\">.</span><span class=\"mtk11\">writeFile</span><span class=\"mtk1\">(</span><span class=\"mtk8\">&quot;input.txt&quot;</span><span class=\"mtk1\">, </span><span class=\"mtk12\">data</span><span class=\"mtk1\">, {</span><span class=\"mtk12\">append:</span><span class=\"mtk1\"> </span><span class=\"mtk4\">true</span><span class=\"mtk1\">});</span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">   </span><span class=\"mtk10\">console</span><span class=\"mtk1\">.</span><span class=\"mtk11\">log</span><span class=\"mtk1\">(</span><span class=\"mtk8\">&quot;Wrote the above text in input.txt</span><span class=\"mtk6\">\\n</span><span class=\"mtk8\">&quot;</span><span class=\"mtk1\">) </span></span>\n<span class=\"grvsc-line\"><span class=\"mtk1\">}</span></span></code></pre>\n<p>In the above code we are using <a href=\"https://github.com/denoland/std/blob/main/README.md\">readLines</a> to raed user input line by line, Every time we run the code <code>Deno.writeFile(\"input.txt\", new Uint8Array())</code> will create an empty <code>input.txt</code> file in the folder.</p>\n<p>Then <code>const line of readLines(Deno.stdin)</code> in a loop will wait for the user to input any text, as we will give any input  <code>Deno.writeFile</code> with <code>{append: true}</code> is used to append data in <code>input.txt</code></p>\n<p>Let's run the program, Once we run it, whatever text we will give to the program through standard input will be written to input.txt</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"5\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">deno run --allow-write write.ts</span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\">Start typing...</span>\n<span class=\"grvsc-line\">This is a demo for Deno</span>\n<span class=\"grvsc-line\">Wrote the above text in input.txt</span>\n<span class=\"grvsc-line\"></span>\n<span class=\"grvsc-line\">In this demo, we will write some text in a file</span>\n<span class=\"grvsc-line\">Wrote the above text in input.txt</span></code></pre>\n<p>If you check the input.txt file you will found the content which was given as input</p>\n<pre class=\"grvsc-container dark-default-dark\" data-language=\"\" data-index=\"6\"><code class=\"grvsc-code\"><span class=\"grvsc-line\">This is a demo for Deno</span>\n<span class=\"grvsc-line\">In this demo, we will write some text in a file</span></code></pre>\n<p>Now you know how to read from a text file and how to write in a text file with Deno, You can found the complete source code used in the above blog on our <a href=\"https://github.com/LoginRadius/engineering-blog-samples/tree/master/Deno/ReadAndWriteInLocalFile\">Github Repo</a>  </p>\n<style class=\"grvsc-styles\">\n  .grvsc-container {\n    overflow: auto;\n    -webkit-overflow-scrolling: touch;\n    padding-top: 1rem;\n    padding-top: var(--grvsc-padding-top, var(--grvsc-padding-v, 1rem));\n    padding-bottom: 1rem;\n    padding-bottom: var(--grvsc-padding-bottom, var(--grvsc-padding-v, 1rem));\n    border-radius: 8px;\n    border-radius: var(--grvsc-border-radius, 8px);\n    font-feature-settings: normal;\n  }\n  \n  .grvsc-code {\n    display: inline-block;\n    min-width: 100%;\n  }\n  \n  .grvsc-line {\n    display: inline-block;\n    box-sizing: border-box;\n    width: 100%;\n    padding-left: 1.5rem;\n    padding-left: var(--grvsc-padding-left, var(--grvsc-padding-h, 1.5rem));\n    padding-right: 1.5rem;\n    padding-right: var(--grvsc-padding-right, var(--grvsc-padding-h, 1.5rem));\n  }\n  \n  .grvsc-line-highlighted {\n    background-color: var(--grvsc-line-highlighted-background-color, transparent);\n    box-shadow: inset var(--grvsc-line-highlighted-border-width, 4px) 0 0 0 var(--grvsc-line-highlighted-border-color, transparent);\n  }\n  \n  .dark-default-dark {\n    background-color: #1E1E1E;\n    color: #D4D4D4;\n  }\n  .dark-default-dark .mtk4 { color: #569CD6; }\n  .dark-default-dark .mtk1 { color: #D4D4D4; }\n  .dark-default-dark .mtk11 { color: #DCDCAA; }\n  .dark-default-dark .mtk12 { color: #9CDCFE; }\n  .dark-default-dark .mtk10 { color: #4EC9B0; }\n  .dark-default-dark .mtk8 { color: #CE9178; }\n  .dark-default-dark .mtk15 { color: #C586C0; }\n  .dark-default-dark .mtk6 { color: #D7BA7D; }\n  .dark-default-dark .mtk3 { color: #6A9955; }\n</style>","headings":[{"value":"Before You Get Started","depth":2},{"value":"Part 1: Read a file and print text out of it","depth":3},{"value":"Part 2: Create a file and write text in it","depth":3}],"fields":{"slug":"/engineering/read-and-write-in-a-local-file-with-deno/"},"frontmatter":{"metatitle":null,"metadescription":null,"description":null,"title":"Read and Write in a local file with Deno","canonical":null,"date":"June 09, 2020","updated_date":null,"tags":["Deno"],"coverImage":{"childImageSharp":{"fluid":{"aspectRatio":1.6666666666666667,"src":"/static/d11d2715523eeb315fdcc7727f48ec20/483a3/deno_file_system.webp","srcSet":"/static/d11d2715523eeb315fdcc7727f48ec20/1c9b5/deno_file_system.webp 200w,\n/static/d11d2715523eeb315fdcc7727f48ec20/f1752/deno_file_system.webp 400w,\n/static/d11d2715523eeb315fdcc7727f48ec20/483a3/deno_file_system.webp 600w","sizes":"(max-width: 600px) 100vw, 600px"}}},"author":{"id":"Puneet Singh","github":"puneetsingh24","bio":"Very curious about this world and blogging whenever learning something new","avatar":null}}}},"pageContext":{"id":"4eaf938c-ad64-5743-b4d2-a17da0b02771","fields__slug":"/engineering/read-and-write-in-a-local-file-with-deno/","__params":{"fields__slug":"engineering"}}},"staticQueryHashes":["1171199041","1384082988","1711371485","1753898100","2100481360","229320306","23180105","528864852"]}