Text IO and File IO, are useful sources, and sinks, when you need to work with text, or files respectively. Let's dive into an example, in Java, for Text IO. This is a simple read, using Text IO. There are various different read methods, [inaudible] available for Text IO. Now, let's take a look, at a couple of Python examples. In the first example, you provide, a file name, as the first step, and pass that, into the second step, which uses the file name, to read from a file. This is example, where the second step, is also a source, and not necessarily, the first step. For the second example, you're reading from a file, by passing in the file name. Use the method, that best suit your needs. Here's an example, of File IO, in Java, using a file match pattern. The match keyword, and the argument file pattern, will allow you to search for a pattern, as seen here. You're able to use, the file name, and other metadata, as part of the read. In the Python example shown here, you're mapping the file, to the variable x, and using the object to access, the contents, and the metadata. File pattern matching is useful, when you need to grab, a range of files. Beam file IO, is also able to continuously monitor, a location, for a particular pattern. This Java example, will monitor, to the location, every 30 seconds, for an hour, to see if new files match, to pattern provided. This pattern is useful, for times, when you have files flowing in, but have a sliding [inaudible] window, in which, they will arrive. Here's another example, but rather than providing the file names, you read off a message queue, such as, PubSub, using PubSub IO. Certain systems, like [inaudible] cloud storage, have the native ability, to trigger a message, to PubSub, on metadata changes. The message, is then, parsed, to return the file name, for the subsequent step, that can now target, a file for read. This method, unless, you read, a stream a files. Contextual IO, provides many mechanisms, to enhance the behavior, of text reading. Historically, when more complicated, Texts IOs, reads are required, you are relegated, to using File IO. Contextual IO, let's you use, Text IO for those, use cases. For example, you are able to return things, such as ordinal position, or read MultilineCSVRecords. This is an example, of a sink written in Java, using Text IO, to write your output to a file. You can write to many different file systems, and object stores. Here's another example, of a simple write, using Text IO. This time in Python. Dynamic destinations, allow you to determine, the sink destination, at runtime. You can invoke this, with the bright dynamic function, in Java. This example, allows you to use the transaction type, to determine, the file name. In this Python example, you take the dynamic destinations, a step further, by writing two different sinks, depending on the characteristics, of the data. In this example, the record type, determines, the destination file type. Dynamic destinations, are useful, when you are unsure, of the specific destination, at runtime. In these examples, you can expand the range of your destinations, without altering the code.